Yes, finally. Finally it will be up there in the space. The satellite has been shipped from mission office to ISAC, Bangalore last week. After a week or so, post the pre-shipment review, it will be shipped for PSLV launch at SHAR, Sriharikota. It will be launched in a mega-tropic orbit on September 25th.
The last four weeks have been really tiresome. We came a long way in a single month due to huge inputs from several people. Things didn’t work – we made them work – more failure – fixup and loop. It’s an iteration. While you are inside, you have no idea that you will ever break out of it! The sheer amount of complexity involved in the system made our life really difficult but when I look back at those moments, it was surely worth it. We did it eventually and made it work.
I have been in this team for about two years and it has been an wonderful journey and I quote journey because it is much more than than a research project or an academic project. I have a met a lot of people who were in the team: professors, research assistants, students and others, made friends, shared knowledge, got frustrated with never-ending-work, toiling to make things work, had fun giving up sleep count-less nights, awesome treats and movie sessions. There were highs and lows. It’s a memorable chapter.
For now, waiting for Sept, 25
UPDATE: The launch date has been postponed to Oct’12
I am not really sure how many organizations use ClickOnce to deploy their application from publicly accessible URL and am really skeptical about it. However, it’s a wonderful deployment technology and still can used by with some level of security on public URLs.
I am presenting an overview of how to setup basic authentication and security with WAMP stack. This is imported from my answer to this StackOverflow question. If you like it, please upvote it there.
Public URL is a security issue in ClickOnce Deployment. However, there is a solution for your problem if your web server has windows and .NET installed. Tell me if you have one ? I will have to come up with another workaround for Linux web server in case you have that.
Brief
Firstly, a bit of information about ClickOnce deployment. When you deploy the application, the GET requests on the server made are (assuming WebDir is the publish directory on the server)
G-1. GET /WebDir/setup.exe (Initial download)
G-2. GET /WebDir/MyApp.Application (setup.exe -url request)
G-3. GET /WebDir/MyApp.Application (.application deployment provider URL request)
G-4. GET /WebDir/Application Files/MyApp_1_0_0_0/MyApp.exe.manifest (Application manifest request)
G-5. GET /WebDir/Application Files/MyApp_1_0_0_0/MyApp.exe.deploy
and other .deploy files … (Application file requests)
Implementation
Now, the solution is to intercept these file requests on the server. On IIS, you can attach a custom HTTPHandler and handle the request. On Apache, you can redirect requests to a PHP code using .htaccess files. Apart from this, you will have to generate unique identifier uid for client instances downloaded from the server (can be your license key) and put that in the deployment provider URL query parameters.
Directory Structure
Create an "Application" folder inside your WebDir and restrict access to/WebDir/Application/. Rest everything can be there inside /WebDir/
File Requests
So here’s what you do on a Apache web server hosted on a windows machine:
- Create a custom download page or use the one created from publishing the application using Visual Studio (but you will have to edit it manually!). Let’s assume that page is
/WebDir/Download.php - After authenticating user from
Download.php, you have to sendsetup.exefrom your code (can do it withreadfile()in PHP) to the user. However, the catch is bootstrapper (setup.exe) after installing will do a GET request [G-2]. Don’t forget now, that you have to validate this file request. So basically you change the"setup.exe -url"property to includeuidbefore returning the file. For eg: change it to/WebDir/uid/MyApp.Application[G-2]. You can use MsiStuff.exe to change the URL property for the bootstrapper. - Using a
.htaccessfile, rewrite [G-2] to/WebDir/Handler.php?user=uid. FromHandler.php, you can check if it is a validuid. If it is valid, you will have to include theuidin the deployment provider URL and “Dependent Assemblies Path” in deployment manifest so that if an upgrade request comes (It essentially requests the deployment manifest), you can validate the user there too. Adduidto query string parameters. For eg: change it to/WebDir/MyApp.application?user=uid[G-3]. Don’t forget that you will have to resign the manifests once you modify them. Use Mage or write your own code to do that.
So finally, the GET requests on the server will be (assuming uid=1f3rd)
G-1. GET /WebDir/Download.php
Action: return setup.exe with the -url changed
G-2. GET /WebDir/Application/setup.exe/1f3rd/MyApp.Application
Action: redirect, validate user, change URL, re-sign and return file
G-3. GET /WebDir/Application/setup.exe/MyApp.Application?user=1f3rd
Action: redirect, validate user and return file
G-4. GET /WebDir/Application/1f3rd/Application Files/MyApp_1_0_0_0/MyApp.exe.manifest
Action: redirect, validate user and return file
G-5. GET /WebDir/Application/1f3rd/Application Files/MyApp_1_0_0_0/MyApp.exe.deploy
and other .deploy files …
Action: redirect, validate user and return file
Pros
- Application is successfully deployed and upgraded only if all the requests have a valid
uidin the URL present. - You can now identify different instances of application on client systems. You can track the update history, do a selective version upgrade/downgrade and much more !
Cons
- You will need a windows server to implement the above since you need mage.exe | your-own-.NET-code-signing-application and Msistuff.exe.
- You may have minor performance issues since you are performing validation on every file request. You can choose to skip validation on .manifest and .deploy file requests.
- You will have to ensure proper security for companies certificate which will be present on the web server for signing (You can store it on the server local file-system if you have the full server to yourself. In that case, it is fine unless somebody breaks into machine itself !)
Additional resources on the same
1. Administering ClickOnce Deployments
2. ClickOnce Licensing HTTPHandler
This post is a note to self and probably will be useful to anybody who reads it. I am documenting this on web so that a) I know where to lookup for the list of software to install when my system crashes or in case a truck runs over my laptop b) I will keep updating this post to form a central lookup-for-software list (I will host a wiki and integrate it with Evernote someday if only I get over my laziness !).
Since I have been working for quite some time on windows and developing on .NET so I can only recollect list of software’s on Windows paltform. I will update the linux packages list later.
OS (Dual Boot)
1. Windows Vista/7
2. Ubuntu
Necessary
1. Google Chrome
2. Mozilla Thunderbird
3. Microsoft Office Suite 2010
4. DC++
5. Daemon Tools
6. FileZilla Client
7. Evernote
8. Adobe Reader
9. BitTorrent
Audio and Video
1. VLC Media Player
2. GOM Player
3. FLAC Codecs
IM and Communication
1. Google Talk
2. Skype
3. Pidgin
Zip Software
1. 7-Zip
2. WinRar
.NET Development Environment
1. .NET Framework 3.5 SP1/4.0
2. Visual Studio 2008/2010
3. SharpDevelop
4. ReSharper Plugin for Visual Studio
5. dotTrace Performance Plugin for Visual Studio
6. ViEmu Plugin for Visual Studio
7. NUnit
8. log4net
9. Redgate .NET Reflector
10. Beyond Compare
11. NDepend
12. LINQPad
13. Kaxaml
14. FxCop
Database Related
1. MySQL
2. MySQL Connector for .NET
3. SQL Server (>=2005)
4. SQL Management Studio
Other Development Related
1. MinGW
2. Python (>=3.0)
3. Eclipse PDT
4. Wing IDE
5. PuTTY
6. PuTTYgen
7. Sysinternals Suite (only a few of them required)
Version Control
1. Tortoise Git
2. Tortoise SVN
3. AnkhSVN Plugin For Visual Studio
4. Git Extensions
Games
1. Age of Empires III
2. Age of Empires III – Asian Dynasties
3. Counter-Strike 1.6
Miscellaneous
1. Object Dock
2. Slick Run
3. Windows Live Writer
4. Notepad++
5. Paint .NET
6. WinSCP
7. Disk Defrag
8. Snagit
Optional
1. Cream
2. Cygwin
3. Feed Demon
4. Expression Studio
5. Kundli for Windows
6. Windows Resource Toolkit
Kundli for Windows is there in the list because my family members at times need it. Please don’t judge me for that !
There is Ninite which installs most of the the softwares in a single go. Use it if you end up crashing your HDD.
Well, It has been all summers since I haven’t written anything here. The only reason is that I can think of is I am too lazy to even open my blog. This particular post is more of a remainder to myself – “yes, you did this !”. Anyway, so I have done a lot in the summers.
I am interning at Capillary, a start-up company by IIT graduates in Bangalore providing CRM services. It has been a wonderful experience so far. The tech-team is full of people with energy, enthusiasm and a lot of talent. Also, Bangalore is a nice place to be in or rather south India in general. The weather is awesome opposed to the weather in Kanpur, which is pathetic. I with Ankit, Nadeem and Mayank have vistited some places too: Nandi Hills, Mysore, Savandurga (More to add in the list in the coming weeks). Apart from that, some random stuff to take note of (in no particular order)
1. The ultimate productivity tool is here. As a internet savvy person, I have come across Evernote and it is simply mind-blowing. That’s truly what I wanted; was sick of stupid chrome extensions, to-do maintainers, GTD crappy tool and what not.
2. Start-up experience is nice. I was skeptical about going to a start-up before coming to Capillary; read dozens of stories of “fail start-ups”. If you have the chance to go to start-up, don’t be afraid. If you find the company good yourself, do join. It’s also good that I didn’t get the chance to go for an university intern, perhaps a blessing in disguise – would have been of no use.
3. Facebook is becoming boring now. App spam is so irritating ! Oh, wait there is something else these days in the market in these days – Google+. Let’s see if it can compete with it’s counterparts. I would personally call it another Google social product failure.
4. Being in Bangalore makes me realize the importance of internet in IIT. Speeds outside IIT are fail.
5. The political condition in India has been really interesting. Lot of events and debates for both the sides of table (think Anna Hazare – Baba Ramdev – Congress – UPA)
6. This summers has been epic for movies. Such awesome movies: X-men First Class, Transformer, Pirates of Caribbean, Pyaar ka Punchnama, Kung-fu Panda – II
7. It’s difficult to get good north indian food in Bangalore. Most of them have north indian meals but mostly they are utter failure or simply a modification of a south indian meal.
I will append in case something else comes to mind. Time to sleep now.
I had applied to Directi for their summer internship program. There whole selection process is really scary. They have 3-4 four rounds of qualification. The initial round was CV/Codechef based. Around 200 people all over the India were selected from this stage. We then again had to give an online test on CodeChef which consisted of solving 4 problems in 4 hours. Post this stage, 15 people were selected for the algorithm/technical interview round. I have qualified till this stage; just gave my interview yesterday. For now, let me summarize the interview questions.
The interview round was telephonic and was taken by two persons one after the another.
First person:
1. There are ‘n’ number of screws and bolts each. No two screws have same thickness and likewise for bolts. Also every screw has a corresponding bolt of the same thickness. Now screws and bolts have to be sorted in their order of thickness. The catch in the problem is that screw’s thickness cannot be compared by taking two screws. Only a bolt and screw can have their thickness compared. It can be one of 3 conditions a) Bolt will fit exactly b) Bolt will be loose c) Bolt will not go in the screw.
2. You are given a string of ‘n’ characters where n is even. The string only consist of 6 type of characters: (){}[]. The task is to form a well formed expression. A well formed expression consist of proper nesting of braces and their is no priority between the braces like [ > } > ). You can edit any bracket and change it to remaining types for accomplishing the task.
Example
A. "(){}" is valid
B. "({[]})” is valid
C. “((})” is invalid
Second person:
Since I had only done Computer Networks in my academic curriculum, therefore I was questioned more on that. The questions were fundamental and were easy to answer.
A. What is OSI stack ? What are the different layers ?
B. What is TCP and UDP ? What are the main differences ?
C. Why would one would prefer UDP over TCP ?
D. What is socket ? Explain in brief the whole sequence of low-level communication in between sockets at server and client.
E. What is HTTP ? Explain some of it’s methods: GET, POST etc.
F. What is multi-threading ? What are it’s advantages ?
G. Tell some situations where you will need multi-threading.
H. How do you ensure thread-safety and synchronization between the threads ?
These were the questions that I can recall at the moment. The interview lasted about 2 hours. I am not sure if the interview went good or bad. The call was getting disconnected frequently which annoyed him and me as well. I suppose, if I qualify this stage, there is another interview round in queue. Let’s see what happens.
