├── GSoC ├── GSoC-Orgs.pdf ├── GSoC-Project-Proposal.pdf ├── how-i-did-it.md └── how-to-GSoC.md ├── LICENSE ├── README.md ├── guide.md ├── intern ├── ACM-IITR-intern.pdf └── get-an-intern.md └── research ├── how-to-research-project.md ├── mail-foreign.png └── mail.png /GSoC/GSoC-Orgs.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/periperidip/exploring/aed3378c822887409addb4a52067bc8300931a50/GSoC/GSoC-Orgs.pdf -------------------------------------------------------------------------------- /GSoC/GSoC-Project-Proposal.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/periperidip/exploring/aed3378c822887409addb4a52067bc8300931a50/GSoC/GSoC-Project-Proposal.pdf -------------------------------------------------------------------------------- /GSoC/how-i-did-it.md: -------------------------------------------------------------------------------- 1 | # How I prepared for GSoC 2 | 3 | I started the prep in mid January (which is relatively early I know but I had my own reasons which I am willing to share in-person). My main focus was on Git, but I did keep a list of potential orgs like I mentioned before. I first [completed](https://lore.kernel.org/git/20200118083326.9643-5-shouryashukla.oo@gmail.com/) the Git [microproject](https://git.github.io/General-Microproject-Information/) which is a pre-requisite for any potential GSoC/Outreachy student. 4 | 5 | Due to some internal circumstances at Git, the chances of them appearing for GSoC seemed very low. Hence, I decided to keep CGAL as backup and did a couple of assignments assigned to me by my mentor. Yes, it is a bit hectic to manage two organisations, but it is not impossible. I was also doing my research project at that time (which has now resulted in a publication in IEEE VTC 2021 Spring). I will cover the stuff I did for CGAL and Git below. 6 | 7 | ## CGAL 8 | 9 | For CGAL, I was working on a couple of assignments given to me by a mentor there. The assignments involved playing around with polygons and displaying their faces in various given possible ways. I also had to make some modifications here and there. I was honestly a bit intimidated by the assignment, maybe because it was the first time I was doing a thing like this. I was in touch with the mentor till about late February but lost my enthusiasm for CGAL long before that. 10 | 11 | ## Git 12 | 13 | After completing the aforementioned microproject, I got onto discussing prospective projects with the people at Git. I did face many difficulties in deciding what to do mostly because of the fact that it was difficult to understand what the project demanded. I had to read a lot of codes to understand how things worked; figure out the patterns in the code; make notes of the important catch points. After many discussions I landed on the project `Convert submodule to a builtin`. While reading code, I also tried to comment on other peoples' patches and also solve queries of many others. Why? Because I like helping others and it was giving me more idea about many things about Git. This did give me a bit of an edge while shortlisting (that's what my mentor told me). 14 | 15 | I designed my project timeline in a unique way by working not just after the selection but even after the proposal submission deadline up until the results were announced irrespective of if I was selected or not. I was quite (and still am) passionate about Git and maybe that's why I wanted to work irrespective of my result. You don't have to be like me if you don't want to. This does not affect if you are selected or not. 16 | 17 | --- 18 | It was exerting, to be honest, the whole process since I had not done anything like that ever before, but I guess it was worth it! If I am missing out on anything you'd like to hear, do mention. Bye-Bye! 19 | 20 | -------------------------------------------------------------------------------- /GSoC/how-to-GSoC.md: -------------------------------------------------------------------------------- 1 | # What is GSoC? 2 | 3 | ## What is Open Source? 4 | 5 | Open source software, in simple words, is software which grants anyone the right to publish, modify and study the software under a License. This means different things for different software: In some, you may not require to credit/mention the author(s) of the software in case you distribute the software under your name/brand, while in some cases you might have to. 6 | 7 | Basically, a group of people maintain the software, contributing in some way or the other. And you can freely distribute and modify the software as per your needs. This is the reason why so many distributions of Linux exist (such as Debian, Manjaro, Mint and OpenBSD, to name a few). Anyone is free to contribute this software as per their need without any constraints. Contributions can be anything from writing new programs to changing the Documentation. 8 | 9 | ## GSoC 10 | 11 | GSoC or Google Summer of Code, is a [competition](https://summerofcode.withgoogle.com/) hosted by Google which runs from May to August. The point of this competition is to promote open source culture and try to indulge students into the culture. One does a few contributions into the organisation of their choice and writes a proposal for the project they want to do in the summer as a part of GSoC. The project is reviewed by the mentors and recommends the names of the students to GSoC which in turn selects the students and pays a stipend for the work (around $3000, may change depending on the situation) in a 30-30-40 fashion. Your work is evaluated on a monthly basis and failing any evaluation results in termination of GSoC. You are awarded the money only after passing each evaluation. On passsing all the evaluations, you are eligible for T-shirts and stickers given by Google. **Remember that you are NOT an employee of Google and cannot state the same anywhere.** 12 | 13 | There are about 250 organisations which take part in GSoC and around 1200 students are selected across the world (there is no upper bound on the number of selections, but the figure stays around this number generally). These are the stages of GSoC: 14 | 15 | - Community Bonding Period 16 | - Phase 1 17 | - Phase 2 18 | - Phase 3 19 | 20 | The competition has great prestige associated with it (especially in Indian colleges). A large number of people are not aware with GSoC but if you explain it to them, you get a "wow" reaction. I did my GSoC for Git in 2020. [This](GSoC-Project-Proposal.pdf) was my proposal. [This](how-i-did-it.md) explains how I went about preparing for GSoC. 21 | 22 | # Organisations 23 | 24 | As I said above, there are around 250 organisations each year offering a multitude of projects to work upon. There are not only organisations working on new languages like Go, C#, JavaScript, etc., but also on old languages like ASM, shell and C. Therefore, you will surely not fall short of organisations to choose from. Some well known organisations are: 25 | 26 | - CGAL 27 | - Chapel 28 | - Checker Framework 29 | - Dart 30 | - Django 31 | - Git 32 | - Mozilla 33 | - Oppia 34 | - Sugar Labs 35 | - Tensorflow 36 | - VLC 37 | 38 | to name a few. What each organisation does is your research ;) 39 | Also, if an organisation is not "well-known", it does not mean that it will not offer great work. Oppurtunities like GSoC give you a free pass to connect with people working in all sorts of companies in different countries. Keeping healthy relations with people in the organisation can land you great oppurtunities as well. 40 | 41 | # How to start preparing for GSoC? 42 | --- 43 | 44 | ## Choosing an organisation 45 | 46 | The first thing is to choose the organisation to work for. There are a couple of things to consider here: 47 | 48 | - **What language/framework you want to work on?** Whether you want to stick to something you already know or learn something new. There are some obvious advantages and drawbacks to both the approaches so choose wisely. Remember that this choice can include multiple languages to choose from. For instance, you may want to work in any of Java, C or C++. 49 | - **Filter out the orgs w.r.t. the above choice.** Say you want to work on Go, then obviously look into orgs which are using as their main programming language of choice. 50 | - **Choose according to your interests and the community.** Now that you have a list of organisations, look at the community of the organisations and how things go about. Obviously a couple of chats/mails will not define how the org is but you should get some idea as to how work is done. Try to choose an org with an active community which is friendly to newcomers. 51 | 52 | - **If you had a target organisation in mind from the start** based on reviews/interactions with seniors or elsewhere, then go for it. 53 | 54 | - **Start contributing to the org.** Close to zero organisations will accept a proposal from someone whose name they are hearing for the first time. Your aim should be to stay as active as possible (**without** compromising other things in your life) on the communication channel the org uses and try to get your proposal reviewed. Please contribute to the org in any way possible, only then will you have an edge over others. But before contributing, keep the point mentioned below in mind. 55 | 56 | - **Make sure that the org is registering itself for GSoC.** Many times it happens that the org may not register itself for GSoC due to various reasons and hence any of your contirbutions may not bear fruit in terms of GSoC. Hence, make sure that the org is appearing for GSoC. There are a couple of approaches you can adopt to make sure your work does not go in vain: 57 | - Contribute to the org only after the list of orgs are announced. This is a very safe option and will require less work. 58 | - Keep up with contributing to two organisations, given one of them has appeared frequently for GSoC. This option requires a lot of work but this way you can strengthen your chances of selection since you will be contributing for a longer time. 59 | 60 | - **If for some reason, the org you were contributing to does not show up** at the end, do NOT panic. Take a day off, calm yourself down and look for any other org. It is still not late. It will take you a couple of days to figure out an org since you will have some idea of the orgs appearing. 61 | - Maintain a list of orgs and useful resources for GSoC. [This](https://docs.google.com/document/d/1EDXNxXNmMt2KUI0gP-HAswUk8OoGoYN0AtmOTbmcQ-I/edit?usp=sharing) is what I had maintained during my time. You may not see Git here since I was already making small contributions to there and thought it was pointless to mention it here. 62 | 63 | After following the above steps, you should have at least one organisation to work with. In my case, I decided to work on Git and kept CGAL as my backup in case Git did not appear. Though Git appeared for every GSoC except one till date, but the conditions at that time felt as if they may not come that season. Hence, I kept CGAL as my backup and did some work for them too. 64 | 65 | There are some orgs which are known to require less amount of work to get shortlisted while some need a lot of work to get in. I will not mention the former kind since it may be an insult to those who actually contributing with all their might and dedication. But those in the latter category (*i.e.*, requiring lots of work) are: 66 | 67 | - Afl++ 68 | - Boost 69 | - Git 70 | - OpenCV 71 | - Oppia 72 | - TensorFlow 73 | - The Linux Foundation 74 | 75 | I might be missing out on some. 76 | 77 | ## Contributing 78 | 79 | The GSoC website states that contributing to an org is not necessary, but in fact it is. The sooner you start, the better. The first and foremost thing should be to contribute some code to the organisation (or at least try to). To do this, discuss with the contributors at the org as to how you can do so (given that you are a newbie). Apart from this, the other ways you can make a contirbution is by helping people who are facing some problems. You can also make Documentation changes, like correcting spelling errors etc. The more contributions and activity on the chat group/mailing list, the better. Try to start the contributions by mid-February latest (considering the [organisation list](https://summerofcode.withgoogle.com/archive/2020/organizations/) is declared in March). 80 | 81 | Do not forget to introduce yourself to the org. A small intro about who you are and where you study will be enough. Generally, the orgs are newbie friendly though exceptions are not rare. Do not hesitate from asking for help and please be polite to others. No one tolerates nonsense anywhere. There is a 99.99% chance that others will be right. Accept any mistakes you made and move on. 82 | 83 | If you have troubles with English, it is okay. Stating that English is not your first language and that you have troubles with it won't cause harm and will avoid any confusions. 84 | 85 | I have stated above that asking for help is OK, but this does not mean that you should rely on others only. Please make "Google Search" a regular habit and try to do some digging yourself and then ask for help. Do mention what you found so that others know that you do your homework before asking for help. This will put you in a positive light and also inculcate a great habit of solving problems yourself first. 86 | 87 | 88 | ## The Proposal 89 | 90 | Organisations release a list of projects which one may perform for GSoC. They also state that one may come up with an idea of their own. This is something you should research and discuss very well with your mentors and make sure the idea is feasible. Generally, choosing from the pre-listed projects and making small tweaks in them is a great way to go. In any case, please discuss the project with your mentors and others contributors. 91 | 92 | To start writing the proposal, look at what your seniors and previous year's GSoC student in your org did. SDSLabs has a [list](https://docs.google.com/spreadsheets/d/1D0T_SihqkOFos_wMmcaRLzO48de9RxmgkMp-fEv3y1s/htmlview) which contains proposals of people selected from IITR each year. You will be able to figure out how to write your own proposal. Make sure your proposal is well-reviewed by your mentors and others. 93 | 94 | Even though there is no compulsion of contributing in the "Community Bonding Period", it will be better to do so and hence tailor your proposal accordingly. 95 | 96 | ## Shortlised, now what? 97 | 98 | Great job! Get ready for some good money and respect from your friends. Do not screw up the GSoC period if you want the money and your name on the GSoC website. It will be a great journey ahead and you will learn a ton of new things in a small timeframe. Try making connections with fellow contirbutors (I became fine friends with another fellow Git GSoC'er, also with my mentors and a couple of contributors). It will be lovely if you keep contirbuting there even after GSoC and become a mentor for someone next year. People feel nice to see their students/mentees follow their footsteps and teachings. 99 | 100 | --- 101 | The whole GSoC journey, starting from making your first contribution to passing your third evaluation is a special one, therefore try to make the most out of it. Please do not let anyone else determine your fate and just brush off any negative comments you might get. If you stop believing in yourself, it's all over. Do not give up. 102 | 103 | I hope this guide helps you in some way or the other. Best of luck! 104 | 105 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # exploring 2 | --- 3 | 4 | This guide was made as a part of my own explorations and curiosities in Computer Science. I used to ask my college seniors, _"What should I do in these 4 years to make them memorable?!"_, _"How do I get a taste of everything?"_. Well, there never was a satisfactory answer and when my turn came to answer these questions, inevitably, neither could I provide the same. This is because the answer is too subjective and we are to lazy to jump into the specifics. This repository is just **one of the approaches to the aforementioned question**. I hope this helps you, the reader, in some way or the other! :) 5 | 6 | I am making this guide **without any purpose of self-profit**. This is to help the future generations of this branch as well as anyone who ever wants to learn! I intend to add various disciplines and their resources with the help of others and then maybe add some _"not-so-useful"_ stuff too in the future. 7 | 8 | I will try to make this README more helpful and informative in the future, and maybe add links to the specific portions of the guide here itself. As of now, this guide only mentions the various CS fields, though, I plan on adding some specifics such as some historic references about CS, trusted guides to programming languages, mastering tools such as Git and.. thats all I can think of right now. 9 | 10 | The guide is located in the `guide.md` file. 11 | 12 | Also, when adding things, please keep the formatting consistent! It will be of great help to me! Keep the information added discrete and not too descriptive. 13 | PS: Please suggest a more apt and crisp name for this repository and its description ;) 14 | -------------------------------------------------------------------------------- /guide.md: -------------------------------------------------------------------------------- 1 | ### Table of Content 2 | ------------------------------- 3 | * [Introduction to CS](#introduction-to-cs) 4 | * [Contributing to Open Source](#contributing-to-open-source) 5 | * [Coding](#coding) 6 | * [C++](#c) 7 | * [Basics to Advanced](#basics-to-advanced) 8 | * [Misc Resources](#misc-resources) 9 | * [Other programming tools and concepts](#other-programming-tools-and-concepts) 10 | * [Cryptography](#cryptography) 11 | * [Computer and Wireless Networks](#computer-and-wireless-networks) 12 | * [High Performance Computing](#high-performance-computing) 13 | * [Quantum Computing](#quantum-computing) 14 | * [Computer Architecture](#computer-architecture) 15 | * [Operating Systems](#operating-systems) 16 | * [Competitive Coding](#competitive-coding) 17 | * [ML/DL](#mldl) 18 | * [Linear Algebra](#linear-algebra) 19 | * [Probability](#probability) 20 | * [Computer Vision](#computer-vision) 21 | * [Natural Language Processing (NLP)](#natural-language-processing-nlp) 22 | * [Reinforcement Learning (RL)](#reinforcement-learning-rl) 23 | * [Implementation](#implementation) 24 | * [General Resources for DL](#general-resources-for-dl) 25 | * [Mobile Development](#mobile-development) 26 | * [Android Resources](#android-resources) 27 | * [Flutter Resources](#flutter-resources) 28 | * [Game Development](#game-development) 29 | * [When you want to make a game](#when-you-want-to-make-a-game) 30 | * [Engines](#engines) 31 | * [Guides](#guides) 32 | * [When you want to learn the in and out of a typical game](#when-you-want-to-learn-the-in-and-out-of-a-typical-game) 33 | * [Making Game Engine](#making-game-engine) 34 | * [Graphic Programming](#graphic-programming) 35 | * [Misc](#misc) 36 | * [Information Security (InfoSec) / Hacking](#information-security-infosec--hacking) 37 | * [How to get into Hacking](#how-to-get-into-hacking) 38 | * [Exploits and pwning](#exploits-and-pwning) 39 | * [Web Security](#web-security) 40 | * [Web Development](#web-development) 41 | ### Introduction to CS 42 | ------------------------------- 43 | This section contains the starter pack to understanding Computer Science. 44 | One obviously needs an introduction to the field before picking up an interest. 45 | Sometimes it takes people an year of exploration before they can pick a field of 46 | their choice and it is genuine because everything seems to be gold at the start, 47 | right? I am putting so much emphasis on this section because this may be the most 48 | crucial part of this whole journey, _trying to pick something to work upon_. 49 | 50 | - **[Map of Computer Science](https://youtu.be/SzJ46YA_RaA)**: A detailed video(sort of?) on CS and its disciplines. A must watch 51 | - **[Harvard's CS50](https://www.youtube.com/playlist?list=PLhQjrBD2T382VRUw5ZpSxQSFrxMOdFObl)**: A really good and highly recommended course on introduction to CS. It also provides a hands-on experience to the student. 52 | 53 | 54 | ### Contributing to Open Source 55 | ------------------------------- 56 | The phrase you hear the most after coming to IITR is '1 cr ka package pakka' followed by 'Open source mein contribute kar!(*Tr:* Contribute to Open Source!!). So what exactly is Open Source? How to get started in Open Source? You may find tons of definitions online, but here is a ~concise~ and _maybe_ easy to understand version. 57 | 58 | - **Open Source code** is a piece of code/program/application whose code is available online for free. This means that the code is free to use and modify(though there may be certain extra constraints as well which depend on the licence used by the code). 59 | 60 | - Such programs may be developed by a person(s) or organization(s) and is maintained by a community of people who find the software interesting or worth contributing to. Some examples of tools/software falling in the open source category are: Git, Linux, VLC, OpenOffice, dia, etc. 61 | 62 | - Now, the main question is, **How to contribute to Open Source???!!** Mind you, this is a very subjective answer and may vary from person to person, but here it goes. _Generally_, Opn Source communities are very friendly to newcomers and help an enthusiastic learner a lot in getting started with contributions. Many organisations have a `Contributing` or `MyFirstContribution` type of guides which guide a newbie in getting around the code and provide an overview of the contribution process and what counts as contribution and how to start. Here is [Git's](https://github.com/git/git/blob/master/Documentation/MyFirstContribution.txt) guide. Many communities have a slack channel too for communication. 63 | 64 | - **How do I choose an organisation?!** The answer is well _not so simple_. It is totally upto someone which organisation does one have to choose to contribute to. Generally, it depends on which programming language interests you and what are **your** interests. For instance if someone has interests in networks and communication protocols and the like, they _may_ like OpenSSL. It is not necessary to contribute to a big shot organisation for starters. Some known names in Open source whose codebases are well-maintained are: 65 | - OpenSSL 66 | - Git 67 | - CGAL(Computational Geometry and Algorithms Library) 68 | - Kubernetes 69 | - tensorflow 70 | - boost 71 | - OpenCV, to name a few.. 72 | 73 | 74 | Also, one can look at the Google Summer of Code Organizations page. I am advising this because it has a ton of organisations, using different types of languages and tools, all at one place. 75 | 76 | - **Why contribute to Open Source?** Because, you get to learn tons of new things! Such organisations have a codebase which spans millions of lines hence this aids in increasing one's capability to connect the dots in a large codebase(which two functions and classes are related to each other etc.) Open source orgs have a **NO bullshit policy**, meaning they don't tolerate people who don't want to learn and are just depending on others to write their code. They are very nitpicky meaning they look at the smallest of the errors possible, ranging from using tabs instead of spaces, to a ill-formed commit message. They provide a genuine opportunity to someone to grow. 77 | 78 | - Though this is not _exactly_ related to open source, but my advice to the reader would be that they try answering to people's questions on StackOverlfow and Reddit because these websites too have a no-bullshit policy and if you try to mess around with them you get downvoted to hell. 79 | 80 | I hope this helps you :) 81 | 82 | ### Coding 83 | ------------------------------- 84 | 85 | ### C++ 86 | #### Basics to Advanced 87 | - Accelerated C++ by Andrew Koenig: Effective for students starting with C++ 88 | - A tour of C++ by Bjarne Stroustrup: Effective for those who wants to revisit C++ 89 | - Effective Modern C++ by Scott Meyers: A medium difficulty book expecting a decent grasp over C++. Explains the key features of modern C++. 90 | - C++ Template Metaprogramming by Aleksey Gurtovoy: An advanced book for enthusiasts who wishes to play with type traits and compile time optimizations. 91 | - Modern C++ design by Andrei Alexandrescu: An advanced book for enthusiasts who wants to build massive C++ libraries and wants a standard to help them build. 92 | - Concurrency in Action by Anthony D. Williams: An advanced book for enthusiasts who wants to use the multithreading features introduced in C++11. 93 | 94 | #### Misc Resources 95 | - **[Cherno's C++ series](https://www.youtube.com/watch?v=18c3MTX0PK0&list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb):** Really useful if you're starting with C++. 96 | - **[C++ Annotations](http://www.icce.rug.nl/documents/cplusplus/cplusplus.html):** Can be considered as a manual for C++. 97 | 98 | ### Other programming tools and concepts 99 | - **Free books on goalkicker:** This website contains free reference books on programming languages (such as C, C++, Ruby, Java, etc.), tools such as Git, Powershell and frameworks such as ReactJS, .NET, AngularJS, etc.). Totally worth checking out! 100 | 101 | ### Cryptography 102 | ------------------------------- 103 | - **Art of the Problem**: YT Channel 104 | - **[John Hammond](https://www.youtube.com/channel/UCVeW9qkBjo3zosnqUbG7CFw)**: YT Channel 105 | - **Practicing** 106 | - **[Cryptopals]**(https://cryptopals.com/): It is a great website to do challenges on cryptography. The challenges start with some basic string manipulation tasks, but after that they are grouped by theme. In most cases, you first implement something, then break it in several enlightening ways.This is a different way to learn about crypto than taking a class or reading a book. 107 | - **[CryptoHack]**(https://cryptohack.org/): Another fun platform to learn crypto. 108 | - Doing some CTF challenges is also helpful. 109 | - **Courses** 110 | - **[Introduction to cryptography](https://www.youtube.com/watch?v=2aHkqB2-46k)** by Christof Paar 111 | - **Learn Crypto**: Free course on Coursera by Dan Boneh 112 | - **crypto101.io**: Free crypto manual and course 113 | 114 | 115 | ### Computer and Wireless Networks 116 | ------------------------------- 117 | - **Computer Networks: A Top-down approach; Kurose & Ross**: A must read book on Computer networks. 118 | - **[NPTEL course on Computer Networks](https://nptel.ac.in/courses/106105081/#) by Prof. Sujoy Ghosh**: A good and detailed course on computer networks. 119 | - **Video** on [Network Coding](https://youtu.be/B0ZcAWEvjCA) and [MIMO](https://youtu.be/cbD4NsZQKYw) **by Art of the Problem**. 120 | - **A glossary of terms used in Telecommunication:** [TelecomABC](http://www.telecomabc.com/) 121 | - **Communication Systems by Linköping University:** A good [channel](https://www.youtube.com/channel/UCOrjRoYJPqGiR1SZvU3xcYQ) I just came across which explains key cellular network concepts. 122 | - **alantalkstech:** Another youtube [channel](https://www.youtube.com/user/alantalkstech)which explains networks concepts _(this may be a bit high level and obsolete (the videos date back to late 2000s so proceed with caution)_. 123 | - **Introductory video on 5G:** A good introductory [video](https://youtu.be/GEx_d0SjvS0) by IEEE on 5G technologies. 124 | - **edX course on 4G:** [Here](https://www.edx.org/course/4g-network-essentials) is the course. 125 | - [Telecome Networking](http://www.eventhelix.com/RealtimeMantra/#Telecom_Networking) 126 | - A good **blog** on [Massive MIMO](https://ma-mimo.ellintech.se/what-is-massive-mimo/) 127 | - To further explore modern cellular networks, reading research papers would be a good start. 128 | 129 | I will be creating a Google Drive link to host variouos books, videos and research papers that I have found. Need some free time for that :) 130 | 131 | 132 | ### High Performance Computing 133 | ------------------------------- 134 | - **[ACM IITR's Guide to HPC](https://medium.com/@acmiitr/guide-to-high-performance-computing-b2d9c9a2f77e)** 135 | 136 | 137 | ### Quantum Computing 138 | ------------------------------- 139 | **Blog by ACM IITR:** This [blog](https://medium.com/@acmiitr/guide-to-quantum-computing-d9249d400e2) provides a good starter pack on QC. 140 | 141 | 142 | ### Computer Architecture 143 | ------------------------------- 144 | This deals with the design of computers, and how their are architected. Really cool if you like knowing how stuff works and so on. [MIT's 6.004](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-004-computation-structures-spring-2017/) is a great place to start. 145 | 146 | 147 | ### Operating Systems 148 | ------------------------------- 149 | Super tough and super rewarding if you get it right. 150 | There are different things that one may look for when trying to learn operating systems: 151 | * How to use operating systems: This deals with the interfaces they provide and a good book on this is [The Linux Programming Interface](http://man7.org/tlpi/). It deals with the features that linux provides to the user at the basic level. Really helpful to understand the interfaces that operating systems provide. 152 | * Operating system concepts: This deals with abstract ideas of how operating systems work, their policies and mechanisms, and their role in a computer system. A computer science undergraduate would typically learn this in one of his courses. An excellent book to start off would be [Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/OSTEP/). Try to read Professor Andrew S. Tanenbaum's books as well (He made Minix). 153 | * Operating system development: This deals with making an operating system/components of it. It is arguably the toughest task in Computer Engineering. Doing this is HARD! A good place to start would be the [OsDev wiki](wiki.osdev.org). 154 | 155 | 156 | ### Competitive Coding 157 | ------------------------------- 158 |

159 | To start with Competitive Programming there are a few prerequisites. It is highly advisable to first start with these basics(if you have not yet done so) and only then move forward. These include:
160 | • Get familiar with at least one programming language. C++ is highly advisable followed by python. Though you may choose any other language too.
161 | • Understand the needs and implementations of different data structures in the language. For example, in C++ checkout the STL, vectors, maps, sets, lists, stacks, queues etc.
162 | 163 | After this, you should start with the basic problems, the ones having higher acceptance ratio or the ones with many correct submissions, and then move on to tougher problems slowly. It is very necessary to find the best approach for the problem. Don’t get a habit to just submit a working code and then move on to the next problem. Try to analyse your solution and enhance its time and space complexities. Also try to implement any pre-existing algorithm and do not just find brute-force solutions. 164 | 165 | To learn new algorithms, the ‘Introduction to Algorithms by CLRS’ is a very good book. Read the topics that you are willing to learn or need to learn, completely. Try not to skip sub-sections from it and clear any doubts you have. Another source can be http://cp-algorithms.com/. It is a good collection of several important algorithms and their pseudo-code implementations. 166 | 167 | Also, try to focus on one topic at a time in the beginning. For example, if you read about Dynamic Programming, try to solve a few problems on it to get a better understanding of the topic, before moving further. You can read about its different variations and what are its main uses on the go. 168 | 169 | Do not neglect some topics that you consider are trivial. If you have not read the topics formally but have rough ideas about it, you should at least give it a reading. For example, you may have some ideas about Number Theory or Game Theory, but might not know some theorems relating to it, which are in general quite useful. Nevertheless, this can be skipped if you feel confident about the topic. 170 | 171 | The platforms that are highly advisable include: 172 | • Codeforces 173 | • Spoj 174 | • Hackerrank 175 | • Codechef 176 | 177 | In the beginning focus on learning concepts and not improving your contest ratings. This is very helpful and in fact necessary. If you have weak concepts, it may create a huge problem in the longer run. Refrain from focusing on quantity of knowledge over quality. 178 | 179 | These are just a few things to keep in mind as a beginner. You will be able to figure out other things as you move on. All the best! Cheers. 180 | 181 |

182 | 183 | 184 | ### ML/DL 185 | ------------------------------- 186 | To start with Deep learning first, you will need to brush off some basic Machine Learning skills. You can do any of the below to get a basic idea about Machine Learning 187 | - **[Machine Learning Coursera](https://www.coursera.org/learn/machine-learning)**: The most popular course on Machine Learning. It explains most of the basic concepts in ML in an easy manner. Highly recommended. Cons - It might come off as a bit boring. 188 | - **[UD120 - Udacity Intro to ML](https://www.udacity.com/course/intro-to-machine-learning--ud120)**: If you find the Coursera ML course boring, try this one. It's illustrative, fast-paced and more implementation focused. Cons- A bit less comprehensive than the Coursera ML course. 189 | - **[Machine Learning Stanford CS229](https://www.youtube.com/watch?v=jGwO_UgTS7I&list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU)**: This is a fairly advanced course on ML. Highly comprehensive, great for a deep-dive into ML fundamentals. Recommended only if you want an advanced knowledge in ML. 190 | 191 | The above courses will give you a brief introduction to ML. After this to begin with DL, we highly suggest reading **[Neural Networks and Deep Learning](http://neuralnetworksanddeeplearning.com/)**. It gives a highly intuitive beginner level introduction to DL. After this it's suggested to do the **[Deep Learning Specialization by Coursera](https://www.coursera.org/specializations/deep-learning)**. A general recommendation would be to read the **[Deep Learning Book by Goodfellow et al.](https://www.deeplearningbook.org/)**. It is the so-called "Bible" of DL and a highly recommended read. 192 | 193 | Now for more advanced knowledge, there is a lot you can do, and honestly, you can never do enough. The field is growing at a mind-numbing rate and its tough to keep track of all the stuff going on. Still here are a few "standard" advanced level things to do: 194 | #### Linear Algebra 195 | - **[Essence of Linear Algebra 3B1B](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)**: Do yourself a favour and watch this awesome piece of art. It's the most aesthetically pleasing way Linear Algebra has ever been taught. 196 | - **[Linear Algebra Review and Reference CS229](http://cs229.stanford.edu/section/cs229-linalg.pdf)**: A crisp and easy to understand explanation of the concepts of Linear Algebra you will need in Deep Learning. 197 | - **[MIT OCW 18.06 Linear Algebra](https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/video-lectures/)**: Recommended if you want to deep dive into Linear Algebra. Will teach you pretty much everything you'll ever need in DL. PS. It helps a lot in Quantum Computing as well :P 198 | 199 | #### Probability 200 | - **[Stanford Probability Stat110](https://projects.iq.harvard.edu/stat110/home)**: If you think that probability is only limited to Bayes Rule, watch this and have your mind-blown as the instructor derives results to highly complex problems seemingly out of nowhere leaving you awestruck. 201 | 202 | #### Computer Vision 203 | - **[Stanford Computer Vision CS231n](https://www.youtube.com/playlist?list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC)**: The defacto choice to dive deep into Computer Vision. We'll recommend doing the first seven lectures from the 2016 version and then continuing off to recent year versions for other recent topics. 204 | 205 | #### Natural Language Processing (NLP) 206 | - **[Stanford NLP course CS224n](http://web.stanford.edu/class/cs224n/)**: The defacto choice to dive deep into NLP. 207 | 208 | #### Reinforcement Learning (RL) 209 | - **[RL course by David Silver](https://www.youtube.com/watch?v=2pWv7GOvuf0&list=PLqYmG7hTraZDM-OYHWgPebj2MfCFzFObQ)**: RL course by DeepMind the leading organization in the field. Awesome for an easy introduction to the field. 210 | - **[RL course by UC Berkley](http://rail.eecs.berkeley.edu/deeprlcourse/)**: A relatively more advanced and comprehensive introduction to RL. 211 | - **[Reinforcement Learning: An Introduction](http://incompleteideas.net/book/the-book-2nd.html)**: The Bible of RL. Super comprehensive and highly recommended. 212 | 213 | #### Implementation 214 | - **[Deep Learning with Pytorch by Udacity](https://classroom.udacity.com/courses/ud188)**: To get familiar with PyTorch. 215 | - **[TensorFlow in Practice by Coursera](https://www.coursera.org/specializations/tensorflow-in-practice?utm_source=deeplearningai&utm_medium=institutions&utm_campaign=WebsiteCoursesTFSTopButton)**: To get familiar with Tensorflow. 216 | 217 | #### General Resources for DL 218 | - **[Guide to Deep Learning](https://medium.com/vlgiitr/guide-to-deep-learning-585bfcad0b43)**: A comprehensive Guide to Deep Learning. 219 | - **[Distill](https://distill.pub/)**: Awesome blogs on deep learning with highly interactive visualizations. 220 | - **[Towards Data Science](https://towardsdatascience.com/)**: Collection of premium quality blogs on datascience on medium. 221 | - **[DL topics](https://github.com/vlgiitr/DL_Topics)**: Detailed list of general topics in DL to read about to get a respectable amount of knowledge in the field. 222 | 223 | Aside from all this. Keep on reading blogs on Medium, recent research papers on Google scholar. Follow leading researchers on Twitter and join discussions on Reddit. Keep on contributing to OpenSource Projects or take on a project yourself. Keep on mailing professors or budding startups until someone gives in and offers you a research position. Success in DL is slow but its highly rewarding :P 224 | 225 | 226 | 227 | 228 | ### Mobile Development 229 | ------------------------------- 230 | Here's a list of beginner resources for mobile development in **Android** and **Flutter**. 231 | #### Android Resources 232 | - First of all, you must have a basic knowledge of **Java** or **Kotlin** language to get started with Android development. 233 | - Setting up the Android Studio IDE, the most preferable for Android development, is a great option to go ahead. Refer **[here](https://developer.android.com/studio/install)** for installation guides. 234 | - The best resource to refer to for Android developers is **[Official Android Developer documentation](https://developer.android.com/docs)**. It contains every resource you need for Android development. 235 | - Starting with some tutorials or courses that make developing apps from scratch is a great way to start getting deep dive into Android. Here are a few suggestions from me: 236 | - **Android Development for Beginner by Udacity** - A complete beginner-friendly course series by Google for learning basics of the android development. 237 | - **[Android Basics: User Interface](https://www.udacity.com/course/android-basics-user-interface--ud834)** - Learn how the hand-drawn app designs are transformed into layouts in phones. 238 | - **[Android Basics: User Input](https://www.udacity.com/course/android-basics-user-input--ud836)** - Learn how to add interactivity to the apps with some basics of object-oriented programming. 239 | - **[Android Basics: Multiple App Screens](https://www.udacity.com/course/android-basics-multiscreen-apps--ud839)** - Learn how to show multiple screens and add visual changes on touch events. 240 | - **[Android Basics: Networking](https://www.udacity.com/course/android-basics-networking--ud843)** - Learn the basics of networking in Android. 241 | - **[Android Basics: Data Storage](https://www.udacity.com/course/android-basics-networking--ud843)** - Learn how storing data works in mobile applications. 242 | 243 | - **Understand Android Activity Lifecycle** 244 | - **Moving to Single Activity Structure** 245 | - [Single Activity: Why, When, and How on YouTube](https://www.youtube.com/watch?v=2k8x8V77CrU) 246 | - [10 Best Practices for Moving to a Single Activity 247 | ](https://www.youtube.com/watch?v=9O1D_Ytk0xg) 248 | - **Android Lifecycle cheat sheet** 249 | - [Single Activities](https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-i-single-activities-e49fd3d202ab) 250 | - [Multiple Activites](https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-ii-multiple-activities-a411fd139f24) 251 | - [Fragments](https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-iii-fragments-afc87d4f37fd) 252 | - [ViewModels, Translucent Activities and Launch Modes](https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-iv-49946659b094) 253 | - **Detailed Guide** 254 | - [Activity Lifecycle official guide](https://developer.android.com/guide/https://www.youtube.com/watch?v=7p22cSzniBMcomponents/activities/activity-lifecycle) 255 | 256 | - **Building maintainable and performant apps** 257 | - Once you have got a basic familiarity with Android Dev, it's highly important to learn about app architecture and start writing your apps in "proper" manner. 258 | - [Android Jetpack: Improving App's Architecture](https://www.youtube.com/watch?v=7p22cSzniBM) 259 | - [Guide to App Architecture](https://developer.android.com/jetpack/docs/guide) 260 | - [Android Architecture Samples](https://github.com/android/architecture-samples) 261 | - [Viewmodels and LiveData patterns and anti-patterns](https://medium.com/androiddevelopers/viewmodels-and-livedata-patterns-antipatterns-21efaef74a54) 262 | 263 | 264 | - **[Google Codelabs for Android](https://codelabs.developers.google.com/android-training/)** - Awesome interactive tutorials that teach you the fundamentals of building Android applications. 265 | - After learning about the basics of the frontend and networking, it's also necessary to take a look at the backend. Implementing a self-made backend might become difficult for the beginner. So, Firebase by Google proves to be a great solution with easy use APIs. It provides all the facilities such as database, cloud messaging, and many more. Here are some resources to get on with Firebase: 266 | - **[Firebase Documentation](https://firebase.google.com/docs/guides)** - A complete step-by-step guide that helps you get started with Firebase. 267 | - **[Tutorial for Firebase implementation](https://www.youtube.com/playlist?list=PLGCjwl1RrtcTXrWuRTa59RyRmQ4OedWrt)** - Complete video series for implementation of Firebase in mobile applications. 268 | - Also, implementing material design is a great way to improve the UI and UX of the app. They make your app look more realistic and enhance user experiences. Here's an excellent resource from Android Team. 269 | - **[Material Design](https://material.io/develop/android/)** 270 | - Some blogs containing short tutorials, tips, and hacks for Android developers. 271 | 272 | - **[Android Developers Official Channel on YouTube](https://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg) 273 | - **[Vogella Android Tutorials](https://www.vogella.com/tutorials/android.html)** 274 | - **[Android Hive](https://www.androidhive.info/)** 275 | 276 | #### Flutter Resources 277 | - First of all, why learn Flutter if Android is already present? It's a cross-platform UI toolkit that helps developers build apps for Android and iOS from a single codebase. 278 | - It has its own benefits. Some of them are 279 | - **Hot Reload** - Build your code to life in just milliseconds that make development faster. 280 | - **Expressive, beautiful UIs** - Helps to delight the users with great UI with incredibly fast rendering and flexible designs. 281 | - **Native Performance** - Flutter’s widgets incorporate all critical platform differences such as scrolling, navigation, icons, and fonts to provide full native performance on both iOS and Android. 282 | - **[Flutter Docs](https://flutter.dev/docs)** 283 | - It's obvious as in Android, but it is a good and thorough walkthrough of Flutter. Even it gives directions for getting started with Flutter if familiar with any other mobile development environment such as Android, iOS, React Native. Here are the links for the same: 284 | - **[Flutter for Android Developers](https://flutter.dev/docs/get-started/flutter-for/android-devs)** 285 | - **[Flutter for iOS Developers](https://flutter.dev/docs/get-started/flutter-for/ios-devs)** 286 | - **[Flutter for React Native Developers](https://flutter.dev/docs/get-started/flutter-for/react-native-devs)** 287 | - **[Google Codelabs for Flutter](https://flutter.dev/docs/codelabs)** - This provides a guided, hands-on coding experience on building Flutter apps. 288 | - **[Udacity - Build Native Mobile Apps with Flutter](https://in.udacity.com/course/build-native-mobile-apps-with-flutter--ud905)** - This course can be a great start to get know things about Flutter. It is being offered by the Flutter team. 289 | - **[Flutter Widget of the Week](https://www.youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG)** - A video series on youtube each explaining the working of a single widget in Flutter. 290 | - **[Awesome Flutter](https://github.com/Solido/awesome-flutter)** - A GitHub repository with a great list of the best Flutter libraries, tools, tutorials, articles and many more. 291 | - Some good blogs containing short tutorials and latest news about Flutter. 292 | - **[Blogs by Flutter](https://medium.com/flutter-io)** 293 | - **[Medium - Deven Joshi](https://medium.com/@dev.n)** 294 | - Flutter also has a huge community where you can do any discussions, showcases and many more related to Flutter. Here is the list: 295 | - **[Gitter Chat](https://gitter.im/flutter/flutter)** 296 | - **[Flutter Community Slack](https://fluttercommunity.dev/joinslack)** 297 | - **[Reddit - Flutter Dev](https://www.reddit.com/r/FlutterDev/)** 298 | - **[Discord - Flutter Dev](https://discord.gg/N7Yshp4)** 299 | - **[Twitter - Flutter Dev](https://twitter.com/flutterdev)** 300 | 301 | **[Stack Overflow](https://stackoverflow.com/)** - This Q/A platform will most probably answer to any of your problems in the development. If sometimes it misses, **[Google](https://www.google.com/)** is always there to help you! 302 | 303 | I think these are enough resources to get you familiar with the mobile development field, whether it is Android or Flutter! 304 | 305 | 306 | ### Game Development 307 | ------------------------------- 308 | 309 | #### When you want to make a game 310 | 311 | 1. Pick up an engine. 312 | 2. Start using it. 313 | 3. Understand the architecture followed by it. 314 | 4. Publish? (completing a game is daunting task) 315 | 316 | ##### Engines 317 | 318 | * Editor based 319 | 320 | * Unity / Unreal (bread and butter engine for indies/AA/AAA studios, GUI based editor) 321 | * Godot (Open Source, kinda new, GUI based editor) 322 | 323 | All three of them have a dedicated forum to ask/answer question. However, for Unity take a look at [Brackeys](https://www.youtube.com/channel/UCYbK_tjZ2OrIZFBvU6CCMiA) and for Godot take a look at [GDQuest](https://www.youtube.com/channel/UCxboW7x0jZqFdvMdCFKTMsQ) 324 | 325 | * Code based 326 | 327 | * Raylib (Great for starting out, beginner friendly) 328 | * Cocos2d-x (Seems small and unpopular but It is **hugely** popular in Asia) 329 | * LibGDX (It is java based, so **GC** is available for help) 330 | 331 | Again, all of them have respective forums to ask/answer questions. 332 | 333 | For Raylib, I would recommend joining their [discord](https://discord.com/invite/VkzNHUE) server to ask questions 334 | 335 | For Cocos2d-x see [Ray's website](https://www.raywenderlich.com/), it is mobile focused so you would find topics related to Android/iOS too. It's hard to find tutorials in English (most of them are in Chinese) 336 | 337 | ##### Guides 338 | 339 | * Besides these specific resources check Mike's website [Games From Scratch](https://www.gamefromscratch.com) especially his [Getting Started Guide](https://www.gamefromscratch.com/page/Getting-Started.aspx) and Game Engine Introduction Series where he setup and review game engines/ framework. 340 | * **r/gamedev** has a detailed [getting started guide](https://www.reddit.com/r/gamedev/wiki/faq#wiki_getting_started) 341 | 342 | #### When you want to learn the in and out of a typical game 343 | 344 | Keep in mind that *video game is just a big while loop*. Everything else is normal everyday programming. 345 | 346 | ##### Making Game Engine 347 | 348 | * The best way to learn the internals. Take a look at [TheCherno's Game Engine Programming Series](https://www.youtube.com/playlist?list=PLlrATfBNZ98dC-V-N3m0Go4deliWHPFwT) 349 | 350 | ##### Graphic Programming 351 | 352 | Programming the graphical aspect of games. 353 | 354 | * Start with [OpenGL](https://learnopengl.com/). Keep your linear algebra in check. 355 | * For Vulkan, check [Khronos Group's starting guide](https://www.khronos.org/blog/beginners-guide-to-vulkan). Although OpenGL is enough for hobbyist and fundamentals, Vulkan is the future. I wouldn't recommend going this far. 356 | * To learn CG from scratch visit [ScratchAPixel 2.0](https://www.scratchapixel.com/) It's the best guide for CG fundamentals. 357 | * [Tiny Renderer](https://github.com/ssloy/tinyrenderer) is a brief version of ScratchAPixel (skipping some concepts like ray tracing). 358 | 359 | ##### Misc 360 | 361 | * When you start spitting *spaghetti code* then [Game Programming Patterns](https://gameprogrammingpatterns.com/) will help. These patterns are useful in general programming too. Bob's [Crafting Interpreters](https://craftinginterpreters.com/) is a gem for programming language development. It's so good that due to lack of section, I am mentioning it here. 362 | * Networking is an interesting part of multiplayer games (most interesting for me), check [Gaffer On Games](https://gafferongames.com/) and [Valve's articles](https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking). These resources are a very high level view of this topic. 363 | * [Gamasutra](https://www.gamasutra.com/) is a website focused in game development. There are many great articles. 364 | * For talks and slides related to this field watch Game Developers Conferences. Their archives [GDC Vault](https://www.gdcvault.com/) 365 | * Join [r/gamedev](https://www.reddit.com/r/gamedev/) to find more guides/articles/news related to this field. 366 | 367 | ### Information Security (InfoSec) / Hacking 368 | ------------------------------- 369 | 370 | #### How to get into Hacking 371 | 372 | - [How to get into Hacking: Livestream by Gynvael Coldwind](https://www.youtube.com/watch?v=9I5RAWGWj7I) 373 | - [So you want to get into security: Essay by by Parisa Tabriz](https://www.freecodecamp.org/news/so-you-want-to-work-in-security-bc6c10157d23/) 374 | - [picoCTF](https://picoctf.com/): great beginner friendly CTF, challenges stay online all year round 375 | 376 | #### Exploits and pwning 377 | 378 | - [LiveOverFlow's binary hacking playlist](https://www.youtube.com/playlist?list=PLhixgUqwRTjxglIswKp9mpkfPNfHkzyeN): A good playlist to know about binary hacking as well as C and Linux. 379 | - **pwnable.kr**: Challenges starting from basic programming errors to standard pwnables 380 | - **pwnable.xyz**: Challenges based on easy-to-find vulns and interesting exploits 381 | - **gracker.org**: Nice binary exploitation challenge series. Good for beginners 382 | - **https://dhavalkapil.com/archive/**: Blogs by Dhaval Kapil on some basic/intermediate information security 383 | - **pwnable.tw**: Medium to difficult pwning challenges. Great if you want to try your hands on some real world exploit development. 384 | - [Gynvael Coldwind's youtube channel](https://www.youtube.com/user/GynvaelEN): One of the best channels if you want some good CTF experience, tips and reverse engineering tips too. 385 | - [Murmus CTF youtube channel](https://www.youtube.com/channel/UCUB9vOGEUpw7IKJRoR4PK-A): Channel talking about real world exploit development and 0days. 386 | - [Shellphish how2heap](https://github.com/shellphish/how2heap): This repo contains POCs of the standard and modern heap based exploits and their well-put explanation. 387 | 388 | #### Web Security 389 | 390 | - [Natas Wargame from overthewire](https://overthewire.org/wargames/natas/): Beginner friendly web-security challenges based on various topics, mostly covering php 391 | - [PortSwigger WebSecurity Academy](https://portswigger.net/web-security) 392 | 393 | 394 | ### Web Development 395 | ------------------------------- 396 | - There are no prequisite though, but you should have a habit of googling things because on the go you need a heck lot of knowledge about multiple things extending from OOPs to cloud computing to security. Why you need to know about these? Because : 397 | - You want your web app source code to be scalable(as new features are getting added, complexity increases which can only be coped up by following some proper structure and principles). 398 | - You don't want your web app server to go down due to increase in user traffic. 399 | - You don't want your web app to be vulnerable and exploitable. 400 | 401 | 402 | 403 | 404 | 405 | - Start with obvious stuff, HTML and CSS. They may seem a bit boring but they are the core of webdev. So, here are some of the resources: 406 | - This is an introductory [course](https://www.coursera.org/learn/web-development) to web development. 407 | - [W3Schools](https://www.w3schools.com/) is one of the most popular website to learn basics in minutes. 408 | - Next thing to learn is Javascript a.k.a JS. This is used for both frontend and backend work and in fact it's used for non-browser work too. JS is bundled with many principles and structures. You should also know how to use OOPs with JS. So here are some of the great resources: 409 | - [Telusko Javascript Tutorial](https://www.youtube.com/playlist?list=PLsyeobzWxl7qtP8Lo9TReqUMkiOp446cV) 410 | - [Object-oriented Programming in JavaScript: Made Super Simple ](https://www.youtube.com/watch?v=PFmuCDHHpwk) 411 | - [ES6 Javascript: The Complete Developer's Guide](https://www.udemy.com/course/javascript-es6-tutorial/) by Stephen Grider (68 lectures / 6hrs). 412 | - Now once you are done with basics, you are ready to learn some awesome frontend frameworks(I would really urge you to first understand what's difference between these frameworks and normal HTML & CSS, trust me internals are really soothing and beautiful): 413 | - **[ReactJS](https://reactjs.org/)** : When it comes to creating painless and interactive *heavy* UIs, this is the best to opt. 414 | - [React for beginners](https://www.youtube.com/playlist?list=PLC3y8-rFHvwgg3vaYJgHGnModB54rxOk3) by Codevolution. 415 | - [React component, elements and instances](https://medium.com/@dan_abramov/react-components-elements-and-instances-90800811f8ca#.rjx4d6bgw) by Dan Abramov. 416 | - React is incomplete without redux. So do check it out. 417 | - **[Vuejs](https://vuejs.org/)** : Vuejs is really easy to get grasp on, it takes hardly any time to write code in Vue. And best things about Vue are elegant programming style and patterns and massive documentation. 418 | - [Vue documentation](https://vuejs.org/v2/guide/) Trust me, this is really good! 419 | - [VueJs Crash course](https://www.youtube.com/watch?v=Wy9q22isx3U) 420 | - Now, let's hope into backend/server-side stuffs. For a beginner, it's always good to start with [NodeJs](https://nodejs.org/en/) because you have already learnt Javascript(I hope you followed my prior steps :P) before, so it will be very easy to catch up new concepts. Nodejs is JavaScript runtime environment that lets developers write command line tools and server-side scripts outside of a browser. Here are some of the resources with which you can get started: 421 | - [Nodejs internals(Must read)](https://medium.com/softup-technologies/node-js-internals-an-introduction-to-nodes-runtime-and-architecture-d6ec295c05ab) 422 | - [Nodejs course](https://www.youtube.com/watch?v=fBNz5xF-Kx4&list=PLillGF-RfqbZ2ybcoD2OaabW2P7Ws8CWu) by Brad Traversy. 423 | - **[Django](https://docs.djangoproject.com/en/3.0/)**: Django is one of the most customisable and user friendly production level web application backend. 424 | - [Tutorial](https://docs.djangoproject.com/en/3.0/intro/) the documentation itself provides a great tutorial series. 425 | - [REST framework](https://www.django-rest-framework.org/tutorial/quickstart/) django's implementation to build RESTful APIs without any hassle. 426 | - **[Flask](https://flask.palletsprojects.com/en/1.1.x/)**: Flask is framework to build lighwieght backends swiftly in Python. 427 | - I think these are enough to pave your way through the **basics** of web developement. 428 | 429 | -------------------------------------------------------------------------------- /intern/ACM-IITR-intern.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/periperidip/exploring/aed3378c822887409addb4a52067bc8300931a50/intern/ACM-IITR-intern.pdf -------------------------------------------------------------------------------- /intern/get-an-intern.md: -------------------------------------------------------------------------------- 1 | # What is an intern? 2 | 3 | Quoting from here: 4 | 5 | > a [period](https://dictionary.cambridge.org/dictionary/english/period 6 | > "period") of 7 | > [time](https://dictionary.cambridge.org/dictionary/english/time 8 | > "time") during which someone 9 | > [works](https://dictionary.cambridge.org/dictionary/english/works 10 | > "works") for a 11 | > [company](https://dictionary.cambridge.org/dictionary/english/company 12 | > "company") or 13 | > [organization](https://dictionary.cambridge.org/dictionary/english/organization 14 | > "organization") in 15 | > [order](https://dictionary.cambridge.org/dictionary/english/order 16 | > "order") to get 17 | > [experience](https://dictionary.cambridge.org/dictionary/english/experience 18 | > "experience") of a 19 | > [particular](https://dictionary.cambridge.org/dictionary/english/particular 20 | > "particular") 21 | > [type](https://dictionary.cambridge.org/dictionary/english/type 22 | > "type") of 23 | > [work](https://dictionary.cambridge.org/dictionary/english/work 24 | > "work"): 25 | 26 | For on-campus interns, you work for about 2.5 months in the company which recruits you and try to contribute to their work and maybe even work on some new technologies. The companies coming for a recruitment drive range from established ones like Google, Microsoft, Adobe, Oracle to new-age startups. The recruitment drive not only sees tech companies but various banks and research organisations such as Goldman Sachs, Sprinklr, Société Générale, etc. 27 | 28 | # How are interns hired? 29 | 30 | Companies have various ways of hiring tailored to the requirements of the interns they want. Some recruit directly, based on the grades of the students, some host coding tests, some have a mixed bag of questions. I will try to be as unfiltered as possible with the things I state. 31 | 32 | The general pattern is: 33 | 34 | 1. A test which includes coding questions, aptitude, CS 35 | questions, etc. 36 | 2. Multiple interviews rounds depending on the company. 37 | 38 | Since the pattern may change every year depending on the conditions, I will not mention it explicitly for each company. Though here are some trends related to a few companies: 39 | 40 | 1. Google: Always shortlists for interviews via resume. 41 | Your CG and competitive programming background will matter. 42 | There is no point of any other achievements. 43 | 44 | 2. Adobe: Has many of its divisions come to campus for recruitments. 45 | It also reaches out to the top 5 students of CSE for a direct offer. 46 | You can also give a test for it and get selected. 47 | 48 | 3. Microsoft: Considered a relatively easy company to crack 49 | as compared to the big guns which come in the first couple 50 | of weeks. 51 | 52 | 4. Companies which come in the later weeks (in the 3rd or 4th week 53 | and after) have relatively easy coding questions and also focus 54 | on the resume of the student. This does not mean that one should 55 | expect easy coding questions from them. Another thing to note 56 | is that their tests are not solely focused on coding but 57 | also contain aptitude, math and CS questions. 58 | 59 | Another reason why I did not get into the testing and interviewing experience of these companies is that they vary from year to year. For instance: This year (2020), Adobe did not directly recruit the top 5 DRs. Microsoft placed minimum CG criterion of 8 (which was 7) hence made the recruitment process more challenging. 60 | 61 | I obviously cannot give you false hope by stating anything inaccurate so I will be brutally honest with the things I mention. One thing to keep in mind is that about 70% of the companies will have a CG criterion on them (generally 7; I have seen a few 6.5 and 8 as well), so be prepared for that. The exceptions to the CG criteria are Google, Amazon, Adobe, JPMorgan Chase & Co., Goldman Sachs, to name a few. 62 | 63 | Therefore, it is self-evident that you should try to improve your grades no matter what else you do apart from that. A CG is 7.5+ will make you eligible to sit in the tests for 80-85% of the companies. So you have two semesters to make things better. 64 | 65 | But if you have a low-grade point, the other way you can compensate is by honing your competitive programming skills. However, remember that when your scores in a test tie with someone else, the tiebreaker will be the CG. 66 | 67 | # How to prepare for interns? 68 | 69 | ACM IITR provided with a great [list](ACM-IITR-intern.pdf) of resources which you can refer to here. Now that you have some help, you now need a roadmap for the preparation: 70 | 71 | ### When to start? 72 | 73 | Starting as early as possible will increase the chances of getting a well-paying intern (good payment $\not\propto$ good work BTW, totally depends on the company). But since people have other engagements such as GSoC/Outreachy (I highly recommend these), projects, etc., starting a year before may not be possible. 74 | 75 | Going by the experiences of my friends who now have great interns, the best time to start will be the end of the 3rd semester (*, i.e.*, after the end sems). 76 | 77 | For those who have the above-mentioned engagements, you might need to work just a bit harder (or choose an org/project which has very little work). And most probably, you will not be able to start even after the midsems of 2-2 since that time is the peak for GSoC (you have to start writing your proposal at that time). So, if you plan on taking up a project or getting into these competitions, try to cover some ground when you are free, *, i.e.*, in the winter break after 2-1 end sems. 78 | 79 | If for some reason, you did not start then, do not worry, the summer vacations after 2-2 will help you cover the lost ground though you will have to work quite hard for that. 80 | 81 | ### What to study? 82 | 83 | The best places to prepare for interns are InterviewBit and GeeksforGeeks. I suggest you save LeetCode for the placements ;) 84 | 85 | Start doing InterviewBit from topic 0: "Time Complexity" and keep going **sequentially**. Do **NOT** try to skip topics (something I tried to do and found no luck doing it). InterviewBit has a couple of broken and incomplete questions, so ignore them if you come across any. It will be tough, to begin with; the main problem you will face is that you will not be able to figure out how to come up with an approach for the question. You will be able to get that "feel" that this is how you want to approach but won't be able to come up with a concrete solution. That is OK; that is one thing you will face for quite a handful number of questions, and the only solution to this problem is practice. It is OK to look at the solution to the problem if you are stuck for 15-20 minutes or so. With time it will all start to click and become comfortable. 86 | 87 | Apart from IB, this [link](https://www.geeksforgeeks.org/must-do-coding-questions-for-companies-like-amazon-microsoft-adobe/) contains a significant number of HOTS (Higher Order Thinking Skills; I did not make this term up, learnt this in class 8th) questions. Try attempting them to know what's up. 88 | 89 | ### What if I started late and was not able to do much? 90 | 91 | I know this situation very well. I too started very late (in the third/fourth week of the interns when every big one had recruited; I had some other plans and did not want to sit for on-campus interns). In such a situation, try to get a good grasp of these topics: 92 | 93 | - Sorting techniques: Bubble, Quick, Insertion, Selection, Merge and Heap Sort. 94 | - Tree traversals: BFS and DFS. 95 | - Attempt at least one question from each bucket of the following topics: 96 | - Arrays 97 | - Strings 98 | - Trees 99 | - Maps 100 | - Hashing 101 | 102 | If time allows, then also try to attempt: 103 | - Two Pointers 104 | - Math 105 | 106 | And keep doing some questions from the link mentioned above. Since there is a time crunch, you cannot write the code for every problem, therefore think of the approach and cross-check it. You can do this even when doing any mundane activity such as having dinner. 107 | 108 | ### What if I did all of the above and have nothing to do? 109 | 110 | If you reach this stage, then it is great! But, do not ease out in such a case else your skill to solve questions will start to diminish. In such a case, try doing the "Medium" and "Hard" questions from LeetCode of the topics you like. Do the [puzzles](https://www.interviewbit.com/puzzles/) section of IB, or from [GFG](https://www.geeksforgeeks.org/puzzles/). This will keep you entertained. If your thirst still isn't satisfied, then take part in CodeChef contests. 111 | 112 | ### Any other thing to keep in mind? 113 | 114 | Even if you are not well versed with the coding part, and have not done much yet appear for an interview or are giving a test, be as cool-minded as possible. Do not think of the result or panic if you do not understand anything. Try re-reading the questions and solve them at a slow pace. Even if you might not get shortlisted, you still will gain some experience. 115 | 116 | Now a couple of things specific to tests and interviews. 117 | 118 | #### Tests 119 | 120 | There is a high chance that the questions will repeat, *, i.e.*, you may encounter a problem from IB, LC or GFG. Therefore, the approaches should be on your tips. I am not asking you to memorise questions, but some questions have unique approaches which one may not be able to come up with on the spot (for instance Longest Palindromic Substring in [`O(n)`](https://www.geeksforgeeks.org/kmp-algorithm-for-pattern-searching/)). Try revising the approaches of some pet questions such as 0/1 Knapsack, LPS, print left side of tree etc. It will save you some time in the exam. The thing is that many questions are based on the fundamental questions only and use approaches very similar to these questions. 121 | 122 | #### Interviews 123 | 124 | I cannot stress enough number of times that you have to stay calm during an interview. Do **NOT** try to break the ice with the interviewer, let him do so. Follow the lead of the interviewer and reciprocate the energy he is giving away. Do **NOT** be very frank with him if he is reserved, it may come off as rude and overconfident. 125 | 126 | Go in with the mindset that many companies are coming ahead and not securing an intern in this company won't cause harm. Some good soft skills go a long way, trust me when I say this. Also, try to have a good resume and be well versed with the achievements/projects/PORs you state in the resume. A good resume will make you stand out among a herd of other candidates. I mean, you came to college to learn a lot of things (not limited just to your degree) and your work in these four years will determine the start of your career and maybe even help you get a headstart over others. 127 | 128 | --- 129 | I feel that I have mentioned plenty of things now and I am intentionally avoiding some stuff since that kind of things one should experience to learn better ;) 130 | 131 | On an ending note, please maintain good spirits with your friends and maintain a healthy competition instead of trying to bring each other down. Even a little bit of support goes a long way and leads to great friendships and life satisfaction. I cannot credit my friends enough for helping me through these tough times, knowing that I started stuff late due to my own mistakes and helping me despite having their recruits to look after. Many of the tips I have written above are bits of advice from my good friends. 132 | 133 | I hope now you get the idea of how things will be. Best of luck! I hope this helps you in some way or the other. 134 | 135 | -------------------------------------------------------------------------------- /research/how-to-research-project.md: -------------------------------------------------------------------------------- 1 | # Research Projects 2 | Research projects are a special sort of projects which may last anywhere from 3 months to a whole year or beyond. They invlove researching on a particular topic/field either individually or under a professor or under an organisation. I will talk about those done under a professor or an organisation and how to go about them. Both of them involve similar procedures so a single writeup will do I guess. 3 | 4 | ## Benefits of Research Projects 5 | 6 | They provide many benefits for instance: 7 | 8 | - Deeper knowledge in a field 9 | - More contacts you make through the party you're doing 10 | the project under. 11 | - Possibility of publishing a research paper in your UG; 12 | something which is of immense value in the real world. 13 | - Getting a good idea of how research is done; something 14 | which will change your work habits and your outlook on 15 | many things. 16 | 17 | I will not talk about more because that is not the purpose of this guide. 18 | 19 | ## How to get one? 20 | 21 | ### Professors from your college 22 | 23 | To start a research project you need to approach a professor. Mail them first that you want to take up a project under them. Do mention a little about your interests. Be polite please. 24 | ![Here is what I wrote while contacting my Professor Rahul Thakur.](mail.png) 25 | 26 | If I remember correctly, I asked a friend of mine to write the mail introducing us, so this isn't the first mail. Though, he backed out of the project after the first meeting so it is practically _my_ first introduction. I hate to use "_PS_" but I don't know why i used it above. 27 | 28 | After a couple of meetings with the professor, you will be allotted a project to perform. You may be doing it alone or with a group (depends on the project). 29 | 30 | It is important to note that such mails are generally very short as compared to the ones in the latter category because you generally know the professor here by face or by talking since they belong to your own institution. 31 | 32 | ### Professors from foreign universities 33 | 34 | You may also approach professors from foreign universities for a project. You need to mail them the same way too but your mail will be a bit more verbose now. It will be divided into the following parts (paragraphs rather): 35 | 36 | - **Your brief introduction**: Who you are, what you study, where you study. Try to keep this concise and not make it an autobiography. 37 | - **Your interests**: Keep them relevant to the project. Do not cite interests like playing the Piano or reading books. Talk about the field. What you like, what projects you have done/doing, what you like about them. You may break this para into two for more readability. 38 | - **What work of the professor have you gone through**: Cite a couple of his papers, maybe the recent ones or the ones accepted in great conferences (this does not guarantee that it was great work, but you have to write something so..). Writing what you loved about them would be great! Now not cite more than otherwise it may seem like you are lying. It is okay if you want to cite just one; in that case, do write something about why you liked it or just state something relevant to it. 39 | - **Close the email now**: Write an ending remark, something like: "I have attached my resume for your perusal", "Looking forward to your reply", etc. 40 | 41 | Please remember to attach your resume. Keeping the email crisp is key. A professor skims through your mail or rather his TA (Teaching Assistant) or RA (Research Assistant) reads the mail and decided if it is worth informing to the professor. Half of the things you wrote may not even be read, remember that. 42 | 43 | ![Here is what I wrote while contacting a foreign professor Kaishun Wu.](mail-foreign.png) 44 | 45 | _Though this mail is for a research internship, the same email with similar contents can be written for a research project._ 46 | 47 | The second paragraph could have been shorter and more concise. The overall language could have been better. I wrote this mail in February 2019, so I guess the timing was a bit bad, especially for a Professor in China. Note that such small things like timing also matter. If I were to write such a mail in today's times, it would be far better than this and more concise since now I am aware of how professors read a mail. 48 | 49 | --- 50 | A thing worth mentioning here is that foreign projects may seem very lucrative because, "foreign". But this does not guarantee a good project or a good mentoring from the professor's side please keep this in mind. Doing a project from your own university enables you to physically meet the professor and discuss your problems and findings. 51 | 52 | Both have their own pros and cons, there is nothing wrong with doing a project in your own college, and nothing glorifying in doing the same from abroad. The main takeaway is that how much knowledge you are able to gain. This may sound very cheeky but is very true in today's times when all people care about is bragging and showing off their hollow knowledge to others. 53 | 54 | I hope this helps you in some way or the other! 55 | 56 | -------------------------------------------------------------------------------- /research/mail-foreign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/periperidip/exploring/aed3378c822887409addb4a52067bc8300931a50/research/mail-foreign.png -------------------------------------------------------------------------------- /research/mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/periperidip/exploring/aed3378c822887409addb4a52067bc8300931a50/research/mail.png --------------------------------------------------------------------------------