[{"authors":null,"categories":null,"content":"Young engineers who are entering the workforce now or have entered in the last 2-3 years, if you try to look behind all the token maxxing high, are facing a grim reality right now.\nI use the word “high” very much intentionally because this is how the AI subscription systems have been designed. If you are at the beginning of your career and funding your own subscriptions, then to even stay competitive, you have to keep paying every month. And it requires active flow of income just to keep your subscriptions alive as the free tiers are mostly not great.\nEveryone around you is telling that if you don’t use AI then you are not being useful, or not doing a favor to yourself, or that you are falling behind everyone. So you are under this huge stress to just keep using AI more and more to churn out more code/outcome to show that you can be useful when you join a job. The focus is not even close to learning the first principles of programming.\nI have been telling everyone that this AI buzz will hurt the young people the most because they will bypass all the pains of incremental progress. Experience in programming has always been about how many errors you get to debug yourself. We have delegated that whole process to AI. Folks who have been programming before the AI era mostly know a good or bad code/command because we suffered the bugs. If an AI tool spews out bad code/command, we can immediately smell it. But for young engineers, that’s the smell of code they know. They have to go with whatever is being presented to them. And keep doing the same over and over again.\nSo the more tokens they use, the more they have to use. With no exit hatch. Sounds very similar to some other addictive habits we know, right? Hence the use of the word “high”.\nNow at the flip side of the job market, almost every single job post I see has 3000 applicants because there are too many people, and too few jobs. And also, because almost nothing is going through to the recruiters because they don’t know who to trust and how to filter the 3000 applicants. They don’t know how to figure out which resumes are written by AI and which are written by humans. Who actually knows their stuff, and who doesn’t. And if they even make a call of picking 100 among them, they don’t know who will cheat in the interview using AI, and who won’t.\nFrom the applicant’s side it’s a brute force process. From the recruiter’s side it’s a “guilty until proven otherwise” mentality because of all the bad apples. No space for trust left in the system.\nIf you are a young engineer who is facing this on day to day basis, my advice to you would be to focus on first principles. Look behind all the token maxxing. If you see your peers generating AI slop day in and day out, then calm yourself and see what they are learning from it instead of what they are generating. Because that’s what is gonna matter in the long run. This AI buzz is gonna end and those who know how computers work, how databases work, how servers work, how internet works, how containers work, how distributed systems work, only those will be able to stick around.\nYou can get into a job by using AI. But when the AI slop breaks and you are drowning in the code that does not make sense, first principles will save you. When an interviewer asks you a question your agent didn’t ask you to prepare for, your first-principles knowledge will save you. Go learn the basics.\nIf you are reading this and have questions, please reach out. Don’t lose hope.\n","date":1786617002,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1786617002,"objectID":"33079c8451c057adb3cf5f67351b48af","permalink":"https://bibhasdn.com/posts/2026-08-13-being-a-fresher-in-the-age-of-ai/","publishdate":"2026-08-13T16:00:02+05:30","relpermalink":"/posts/2026-08-13-being-a-fresher-in-the-age-of-ai/","section":"posts","summary":"Young engineers who are entering the workforce now or have entered in the last 2-3 years, if you try to look behind all the token maxxing high, are facing a grim reality right now.\nI use the word “high” very much intentionally because this is how the AI subscription systems have been designed. If you are at the beginning of your career and funding your own subscriptions, then to even stay competitive, you have to keep paying every month. And it requires active flow of income just to keep your subscriptions alive as the free tiers are mostly not great.\n","tags":["ai","engineering","programming","job","career"],"title":"Being a fresher in the age of AI","type":"posts"},{"authors":null,"categories":null,"content":"How Open Source Can Shape Your Career and Growth as an Engineer\nIf you are beginning your engineering journey right about now, using AI tools that work as your second brain sounds great, and will get you through your hobby projects, maybe interviews, first few months at your job. But I would like to talk about something that will help you go through the long career you have in front of you. Technologies will come and go, but you have to move ahead regardless the technologies and tools you have in your hand. Because after a few years you will learn that writing code is effectively a tiny part of being an engineer.\nIf you’re an engineer early in your career, getting involved in open source is one of the best things you can do — not just for your technical skills, but for the way you work and collaborate with others. Open source isn’t just about writing code; it teaches you how to work in teams, think openly, and build strong, long-lasting professional relationships. The lessons you learn from open source communities will stay with you throughout your career, helping you become a better engineer, a better teammate, and a more confident problem solver.\nHere’s why contributing to open source can set you up for success:\nYou Learn to Work with Others Writing code is just one part of being a successful engineer. Being able to work effectively with others is just as important. In open source projects, people from all over the world contribute to the same codebase, meaning that collaboration is essential.\nYou’ll learn how to:\nCommunicate clearly through written discussions in issues and pull requests. Give and receive constructive feedback on code reviews. Work on shared codebases without stepping on each other’s work. Follow best practices in documentation so others can understand and build on your work. These are the same skills that will help you thrive in any engineering team, whether you’re working remotely or in an office. By collaborating with experienced contributors, you get firsthand experience in how real-world engineering teams operate.\nYou Build Transparency and Open Decision-Making Skills In many workplaces, decisions about architecture, design, and implementation happen behind closed doors. In open source, everything happens in public. This means you can see how experienced engineers think through complex problems, debate trade-offs, and arrive at solutions that work for everyone.\nBy participating in these discussions, you’ll:\nLearn how to justify technical decisions with clear reasoning. Understand how different perspectives contribute to better solutions. Gain experience in proposing changes, gathering feedback, and iterating on your ideas. Transparency in decision-making is a crucial skill, especially as you grow in your career. When you eventually take on leadership roles, you’ll already be comfortable with explaining your choices and guiding teams toward the best solutions.\nYou Understand Meritocracy—And Why It Needs Inclusivity Open source projects are often described as meritocracies, where the best ideas win, regardless of who suggests them. In theory, this is great—it means your work will be judged by its quality rather than your job title or years of experience. However, the reality is that meritocracy only works if everyone has equal access to participate.\nNot everyone starts with the same level of opportunity. Some people might have less free time, fewer resources, or less confidence in sharing their ideas. Great open source communities recognize this and actively work to be more inclusive by:\nOffering clear, beginner-friendly contribution guidelines. Encouraging mentorship and pairing newcomers with experienced contributors. Creating welcoming spaces where questions are encouraged, not dismissed. When you contribute to open source, you see firsthand how inclusive environments lead to stronger teams. You’ll carry this lesson with you into your career, making sure that everyone—regardless of background—has a fair chance to contribute and succeed.\nYou Become a Better Engineer One of the biggest challenges of working in open source is knowing that your code is out in the open for everyone to see. Unlike personal projects or closed-source work, where only your immediate team reviews your code, open source code is reviewed by people from different backgrounds, with different perspectives, and with varying levels of experience.\nThis means you’ll have to:\nWrite code that is easy to read and understand. Follow consistent coding standards and best practices. Justify your design choices in ways that others can comprehend. Improve your debugging and problem-solving skills through real-world issues. The feedback you get from experienced maintainers will push you to improve your coding style, optimize your logic, and write more efficient code. Over time, this discipline will carry over into your professional work, making you a better engineer in every aspect.\nYou Learn to Work with Diverse Teams Open …","date":1740469852,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1740469852,"objectID":"7ef7ebfa8b6073cc4e73ece0da45541a","permalink":"https://bibhasdn.com/posts/2025-02-25-open-source-engineer/","publishdate":"2025-02-25T13:20:52+05:30","relpermalink":"/posts/2025-02-25-open-source-engineer/","section":"posts","summary":"How Open Source Can Shape Your Career and Growth as an Engineer\nIf you are beginning your engineering journey right about now, using AI tools that work as your second brain sounds great, and will get you through your hobby projects, maybe interviews, first few months at your job. But I would like to talk about something that will help you go through the long career you have in front of you. Technologies will come and go, but you have to move ahead regardless the technologies and tools you have in your hand. Because after a few years you will learn that writing code is effectively a tiny part of being an engineer.\n","tags":["opensource","foss","engineering","career"],"title":"How Open Source Can Shape Your Career and Growth as an Engineer","type":"posts"},{"authors":null,"categories":null,"content":"Hardcoding secrets like passwords, API keys, and database credentials inside Docker images is a big security risk. If these images are shared or stored in a public registry, sensitive data can be exposed. A much better approach is to store secrets securely and inject them into applications only when needed.\nIn a recent project, I worked on securing secrets in a Kubernetes-based environment using HashiCorp Vault and ArgoCD Vault Plugin. This method ensures that sensitive data is never stored inside the application code or Docker images.\nHow It Works: 1️⃣ Store Secrets in HashiCorp Vault\nSecrets are securely stored in HashiCorp Vault, allowing easy updates and controlled access. This removes the need to keep secrets inside config files or environment variables in the codebase. 2️⃣ Fetch Secrets Dynamically Using ArgoCD Vault Plugin\nDuring deployment, ArgoCD Vault Plugin pulls the latest secrets from Vault. This ensures that applications always get the most up-to-date credentials. 3️⃣ Inject Secrets as OpenShift Secrets\nThe secrets fetched from Vault are stored as OpenShift Secrets. Applications can then access them securely without needing to store them in code. Example: Kubernetes Secret Managed by ArgoCD Vault Plugin apiVersion: v1 kind: Secret metadata: name: sample-secret-group annotations: avp.kubernetes.io/path: apps/data/\u0026lt;sample-approle\u0026gt;/path/to/secret type: Opaque stringData: ENV_VAR_NAME: \u0026lt;key_name\u0026gt; Why This Approach? ✅ No Secrets in Docker Images – Eliminates the risk of leaking credentials. ✅ Automatic Secret Updates – Apps always use the latest secrets without redeploying. ✅ Better Security \u0026amp; Compliance – Ensures secrets are properly managed and controlled. ✅ Scalability \u0026amp; Flexibility – Works smoothly across different environments and clusters.\nBy following this method, we improved security, reduced manual secret management, and made our deployment process safer and more efficient.\nIf you’re working with HashiCorp Vault, ArgoCD, OpenShift, or Kubernetes security, I’d love to hear how you’re handling secrets! Let’s connect and share ideas.\n#Kubernetes #OpenShift #HashiCorpVault #ArgoCD #DevSecOps #SecretsManagement\n","date":1739728252,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1739728252,"objectID":"664fc9c7e2892c6c15ddccf57fe9244c","permalink":"https://bibhasdn.com/posts/2025-02-16-vault-adgocd/","publishdate":"2025-02-16T23:20:52+05:30","relpermalink":"/posts/2025-02-16-vault-adgocd/","section":"posts","summary":"Hardcoding secrets like passwords, API keys, and database credentials inside Docker images is a big security risk. If these images are shared or stored in a public registry, sensitive data can be exposed. A much better approach is to store secrets securely and inject them into applications only when needed.\nIn a recent project, I worked on securing secrets in a Kubernetes-based environment using HashiCorp Vault and ArgoCD Vault Plugin. This method ensures that sensitive data is never stored inside the application code or Docker images.\n","tags":["devops","openshift","hashicorp","vault","docker","k8s"],"title":"Stop Hardcoding Secrets! Use HashiCorp Vault \u0026 ArgoCD for Secure Deployments","type":"posts"},{"authors":null,"categories":null,"content":"I flew back to Kolkata today. Ayanti and I came to Kolkata earlier this month because MIL suddenly fell ill. She had to be hospitalised. And we flew here in hours notice. Then last week i have to travel back to Bangalore for some work. And now I’m back to Kolkata again.\nToo many thoughts are rushing through my mind and I am having trouble processing everything at the same time. So thought I’ll try writing things down.\nFor a long time We have been pondering about these days when we will need to run back to take care of our parents given that we stay far from them in Bangalore, and they are also reaching old age. I guess those days are finally here.\nI have lived primarily in a city that’s far from my parents for over a decade now. My dad has been retired since long before that and mom has always been a home maker. So they have been dependent on me since i was in college.\nWhoever I talk to always assume that i have been able to afford to live far from them because my sister lives close to them.\nThat is partially true. It does afford me some amount of mental space knowing that my sister lives closer to them in case of emergency. But the actual reason why i have lived far from them has always had to do with the fact that i needed to grow myself. I needed to build a network of people that let me grow as a person. Be Somebody who can take better care of their parents when the need actually be. It’s definitely possible that I could dedicate my 100% time to them, but that would have meant staying in a dead city with no space of growth as a techie.\nMy parents have been generally very supportive of this and I’m grateful to them. I’m not sure how much they would think of me if I became a recluse living in one room all my life. Also, i feel like they deserved some time away from their children after bringing us up for almost 30 years or so, me and my sister combined. Ever since I became a parent I started realizing the value of time away from one’s children.\nHow timely that i came across this article from Vox just today in mid flight while listening to one of their podcast episodes that i downloaded right before the flight.\nThe article talks about this exact ethical dilemma. Should we care about our parents full time and sacrifice our own wellbeing? Are we monsters for choosing to stay away from them?\nGive it a read.\nHere is the content for archival purpose -\nMy mother is retired, disabled, and poor. I assist her with her medical care by arranging appointments, talking to her doctors, and finding medical resources that she needs for her many ailments. I’ve even been able to find a home health aide to come to her house six days a week to assist her with daily cleaning, cooking, and other tasks.\nBut as she ages, I know she will need more help than I can provide from afar. And I know I cannot take on the actual tasks of caring for an elderly person with the many issues she has. … Am I a monster for accepting the fact that she will likely end up in a state-run retirement community?\nDear Definitely-Not-a-Monster,\nThis is not a traditional advice column, where someone writes in with a question and comes away with a simple answer. In your case, though, there is one question I can answer very simply right off the bat: “Am I a monster?” The answer is no. The world isn’t divided into good people and bad people (despite what fairy tales and superhero movies tell us). We’re all just human beings, trying to live in line with our values as best we can under the conditions we’re given.\nIt’s clear that you hold multiple values simultaneously. You want your mother to be well-cared for. You also want yourself to be well-cared for.\nWhat could be more natural? I imagine that every animal on Earth feels this dilemma in their guts. And, demographically, it’s a fact that more and more people are going to find themselves in exactly this position as baby boomers age. But I also know from personal experience that just realizing how common a dilemma is doesn’t make the internal tug-of-war any less confusing or painful.\nPeople have been wrestling with this painful confusion for thousands of years. They’ve come up with different ways to navigate trade-offs between these competing values, depending on the social mores of the time. We can learn from the insights they’ve surfaced along the way.\nHistorically, even ancient traditions that take filial piety very seriously acknowledge that there will always be a tension between caring for your parents and caring for yourself. In Judaism, “Honor your father and your mother” is one of the Ten Commandments — it’s not all 10! In fact, biblical commentators have understood another commandment from Deuteronomy, “Guard yourself and guard your soul very carefully,” to mean that you’re obligated to take care of your own body and soul.\nIn the Chinese ethical tradition of Confucianism, your body is considered a gift from your parents, so to harm its health (for example, by stretching yourself too thin) would be to …","date":1738345852,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1738345852,"objectID":"f3f7b0ea1c8f8da1c5db77151e583105","permalink":"https://bibhasdn.com/posts/2025-01-31-to-fro-back-forth/","publishdate":"2025-01-31T23:20:52+05:30","relpermalink":"/posts/2025-01-31-to-fro-back-forth/","section":"posts","summary":"I flew back to Kolkata today. Ayanti and I came to Kolkata earlier this month because MIL suddenly fell ill. She had to be hospitalised. And we flew here in hours notice. Then last week i have to travel back to Bangalore for some work. And now I’m back to Kolkata again.\nToo many thoughts are rushing through my mind and I am having trouble processing everything at the same time. So thought I’ll try writing things down.\n","tags":["travel","parents","wellbeing","life"],"title":"To and fro. Back and forth.","type":"posts"},{"authors":null,"categories":null,"content":"Bandipur Wildlife Diary: A Day in the Wild I got an opportunity to join a group trip to Bandipur forest stay organized by Deepa Mohan and took it on a whim. I bought a new 200-500 mm lens just around that time. It was a good opportunity to test it.\n30 Nov Morning, Early Hours The pickup time was around 6AM and luck wasn’t with me to book a cab. So I walked to the nearest Yulu spot and took a Yulu for pickup. Ananth gave me a tide to and from Bandipur all the way. The morning felt crisp and full of anticipation.\nMorning, Kadamba Coffee Stop Quick coffee break at Kadamba coffee shop right at the junction of NICE road and Mysore road.\nMysore Road Toll Plaza Fascinating moment at the toll. The FASTag scanner wasn’t detecting our vehicle. The attendant’s clever trick? Use the windshield wiper. Magically, it worked immediately!\nBreakfast at Hari Govinda We stopped at Hari Govinda on Mysore ring road for a hearty breakfast. Ananth mentioned Kenneth Anderson - a name that sparked curiosity about wildlife narratives. Ashik generously shared some pistachios.\nBandipur Arrival: Briefing Session Attended the Friends of Bandipur programme explanation. Learned about:\nInstagram presence Booking details Naturalist training opportunities Safari Begins: Afternoon Adventure Initial hours were disappointingly quiet. An owlet greeted us at the start - our first wildlife encounter.\nFirst two hours: Almost nothing. Then, sporadic bird sightings. The bus driver transformed into a wildlife-chasing Vin Diesel, racing to potential leopard locations.\nNear-miss with a leopard. We arrived just moments after it disappeared.\nPost-Safari Excitement Enjoyed tea and onion pakora. Unexpected highlight: A leopard casually walking outside the canteen! Nature’s surprise performance.\nEvening Wildlife Observations Gathered around, sharing stories:\nWaited for deer (they remained alert, we saw nothing) Ashik showed Kerala forest videos Watched elephants crossing a busy road Shalini shared an incredible Jim Corbett story about a tiger encounter just 8-10 feet away Nighttime Wildlife Drama Strict leopard movement protocols:\nTraveled in buggies Cautious dinner arrangements Surprising moment: We spotted a leopard cub right beside the dorm where we were sleeping! Friday Morning Safari Excellent bird watching session. We spotted a lot of birds - eagles, vulture, buzzard, pigeons and what not.\nDeparture and Exploration Checked out of Bandipur. Attempted to visit Himavad Gopalaswamy Temple - too crowded.\nPivoted to Ranganthittu Bird Sanctuary:\n40-minute photography boat ride Captured stunning pelican shots Explored the entire sanctuary Journey Home Bangalore greeted us with rain - a fitting end to our wildlife adventure.\nCulinary Highlights Lunch was a delightful spread:\nPulav Bhindi masala Roti Rice Sambar Papar Payasam Recommended Follow-ups Investigate Bandipur vehicle movement timings Deep dive into Kenneth Anderson’s wildlife writings Research vulture-Parsi connections A day of unexpected encounters, wildlife whispers, and nature’s unpredictable magic.\n","date":1733161852,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1733161852,"objectID":"17c34c74f597f2bd20dfcd63491453d2","permalink":"https://bibhasdn.com/posts/2024-12-02-bandipur-group-trip/","publishdate":"2024-12-02T23:20:52+05:30","relpermalink":"/posts/2024-12-02-bandipur-group-trip/","section":"posts","summary":"Bandipur Wildlife Diary: A Day in the Wild I got an opportunity to join a group trip to Bandipur forest stay organized by Deepa Mohan and took it on a whim. I bought a new 200-500 mm lens just around that time. It was a good opportunity to test it.\n30 Nov Morning, Early Hours The pickup time was around 6AM and luck wasn’t with me to book a cab. So I walked to the nearest Yulu spot and took a Yulu for pickup. Ananth gave me a tide to and from Bandipur all the way. The morning felt crisp and full of anticipation.\n","tags":["travel","roadtrip","bandipur","nature","wildlife","safari","photography"],"title":"Bandipur Forest Stay Group Trip Nov-Dec 2024","type":"posts"},{"authors":null,"categories":null,"content":"After weeks of the usual hustle and bustle of daily life in Bangalore, we felt the need to escape the routine and recharge. The monotony of work, responsibilities, and the constant city noise had started to weigh us down. A break was long overdue—a chance to reconnect with nature, explore new places, and spend quality time as a family. As luck would have it, our friend Navya invited a bunch of us to her home in Shimoga for the independence day weekend. Little did we know, this journey would provide not just a change of scenery, but a series of memorable experiences that left us refreshed and reenergized.\n15 August Our trip started later than planned, leaving Bangalore at 8:30 AM instead of the early morning departure we had hoped for. We were both exhausted and decided that a good night’s sleep was more important. The drive was smooth, and after covering about 150 kilometers, we took a break at a Shell pump for breakfast. It was a welcome stop to stretch our legs and refuel for the rest of the journey.\nWe arrived in Shimoga around 3 PM, and our first stop was Royal Orchid for a buffet lunch. The restaurant had a good spread, and we took our time to enjoy the meal. Afterward, we stopped by FirstCry to pick up a potty seat for Mihir, making sure we were well-prepared for the rest of the trip.\nAs soon as we reached Navya’s place, everyone was ready for a drive to Mandagadde Bird Sanctuary. The drive was scenic and peaceful, winding through lush greenery. We made a few stops along the way, first at the Tunga River, where we admired the flowing water, and then by a serene lake, where Tazz took some drone shots. The tranquility of these spots was refreshing.\nWe wrapped up the day with dinner at Jewel Rock. The restaurant had a cozy atmosphere and a varied menu. However, Mihir started getting restless after spending so much time in the car throughout the day. We decided to head back home early, giving Mihir a warm bath to calm him down before putting him to bed. It was a full day of travel and exploration, and we all needed a good night’s rest.\n16 August While the rest of the group left early for a trip to Jog Falls, we chose to stay back and rest. We had been traveling a lot and needed a slower pace for the day. Navya’s mom sent over a delicious breakfast of chow chow bhat, which we enjoyed leisurely at home. The rest of the morning was spent relaxing, catching up on some rest.\nFor lunch, we visited Navya’s other house, where her mom had prepared a special meal in honor of Varmahalaxmi Puja. The spread was elaborate and tasty, with traditional dishes that everyone enjoyed. Mihir also had his fill, and it was heartwarming to see him enjoy the food.\nAfter lunch, we explored the upstairs area of the house, which had been transformed into an educational institute. It was interesting to see the setup and the way the space had been utilized. We spent the rest of the afternoon at the house we were staying in, just relaxing and enjoying each other’s company.\nIn the evening, we decided to dine at Meenakshi Bhavan, a popular local eatery known for its South Indian cuisine. We had paddu and dosa, both of which were delicious and satisfying. The restaurant had a lively atmosphere, and the food was just what we needed to cap off a relaxing day. We returned home afterward and settled in for the night.\n17 August The day began with a hearty breakfast provided by Navya’s mom, featuring a variety of dishes including dosa, puliyogere, and a sweet-khara mixture made from paper-thin poha. Feeling energized, we decided to visit Shimoga Zoo and Safari. Initially, we thought of taking the jeep safari since we were six people, but the enclosed space felt a bit claustrophobic, so we opted for the bus safari instead.\nThe zoo itself is nestled within a part of the forest, giving it a natural, wild feel. During the safari, we were able to see a variety of animals. The tiger, unfortunately, was in a cage, but the lions were an unforgettable sight as they walked right next to the bus. We also saw gaur, nilgai, and various types of deer. After the safari, we walked through the zoo, which was more like a nature walk due to the ongoing renovations. Many enclosures were empty, but the greenery and fresh air made the walk pleasant, even though it was hot and humid.\nAfter our zoo visit, we decided to have lunch at Kimmane, a luxury golf resort restaurant nearby. The setting was elegant, and the food was decent, though the highlight of the meal was Mihir falling asleep mid-bite—proof of just how tiring the day had been for him. Just as we finished eating, a heavy downpour began, trapping us at the restaurant for a bit. Thankfully, the rain stopped after about half an hour, and we made our way back home.\nThe evening was more relaxed. Tazz flew his drone over the house we were staying in, capturing some aerial shots of the surrounding area. I got a chance to try my hand at flying the drone as well, which was an exciting experience. It left me thinking …","date":1724068252,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1724068252,"objectID":"90ac405c4a7e00ec07d115983f7b2ac0","permalink":"https://bibhasdn.com/posts/2024-08-19-shimoga-road-trip/","publishdate":"2024-08-19T17:20:52+05:30","relpermalink":"/posts/2024-08-19-shimoga-road-trip/","section":"posts","summary":"After weeks of the usual hustle and bustle of daily life in Bangalore, we felt the need to escape the routine and recharge. The monotony of work, responsibilities, and the constant city noise had started to weigh us down. A break was long overdue—a chance to reconnect with nature, explore new places, and spend quality time as a family. As luck would have it, our friend Navya invited a bunch of us to her home in Shimoga for the independence day weekend. Little did we know, this journey would provide not just a change of scenery, but a series of memorable experiences that left us refreshed and reenergized.\n","tags":["travel","roadtrip","shimoga"],"title":"Shimoga Road Trip: August 2024","type":"posts"},{"authors":null,"categories":["devops","sre","linux"],"content":"Recently came across a scenario, where curl was able to connect to localhost but not 127.0.0.1. When I tried curl 127.0.0.1:80, it just hung there. While curl localhost:80 returns the expected output.\nMy first instinct was to check apache config to see if it was only serving to localhost and not the IP address. But that seemed unlikely because /etc/hosts had the correct entry.\nMy next big clue was when I tried curl -v localhost:80, this was the output -\nroot@ip-172-31-21-14:/# curl -v localhost:80 * Trying 127.0.0.1:80... * Trying ::1:80... * Connected to localhost (::1) port 80 (#0) Do you see it?\nlocalhost tries to resolve to 127.0.0.1:80 but gives up and then connects to ::1:80. So essentially connection to IPv4 is failing but IPv6 is succeeding.\nI looked around checking what could be wrong. Why connection to IPv4 would fail. I found that if you mentioned Listed 0.0.0.0:80 or essentially mentioned an IPv4 IP in Apache config, it only connects to IPv4 and not IPv6. But that didn’t have any way to block IPv6 connections. And my config was the default Listen 80 which accepts both v4 and v6.\nI couldn’t find any other way apache could only accept IPv6 and not IPv4.\nWith that I looked at the other ways this could be possible. Which is to of course look at firewall, i.e. iptables. So I ran iptables -S, and lo and behold, there it is -\nroot@ip-172-31-21-14:/# iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j DROP In the hindsight, I should have checked iptables first. But anyway. So I just executed -\niptables -D INPUT -p tcp -m tcp --dport 80 -j DROP Which got rid of the rule. And curl could connect to 127.0.0.1:80 again.\n","date":1692751458,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1692751458,"objectID":"f269cd06081b8a69e6836c8ccb725c9e","permalink":"https://bibhasdn.com/posts/curl-can-connect-to-localhost-but-not-127-0-0-1/","publishdate":"2023-08-23T00:44:18Z","relpermalink":"/posts/curl-can-connect-to-localhost-but-not-127-0-0-1/","section":"posts","summary":"Recently came across a scenario, where curl was able to connect to localhost but not 127.0.0.1. When I tried curl 127.0.0.1:80, it just hung there. While curl localhost:80 returns the expected output.\nMy first instinct was to check apache config to see if it was only serving to localhost and not the IP address. But that seemed unlikely because /etc/hosts had the correct entry.\nMy next big clue was when I tried curl -v localhost:80, this was the output -\n","tags":["devops","sre","linux"],"title":"cURL can connect to localhost but not 127.0.0.1","type":"posts"},{"authors":null,"categories":["devops","sre","container","linux"],"content":"Scenario: You SSH into an Ubuntu server. How do you know if you just logged in inside a docker container, or just a regular VM?\nTurns out there are no straight answers.\nDocker provides virtualization based on Linux Containers (LXC). LXC is a technology to provide operating system virtualization for processes on Linux. This means, that processes can be executed in isolation without starting a real and heavy virtual machine. All processes will be executed on the same Linux kernel, but will still have their own namespaces, users and file system.\nAn important feature of such virtualization is that applications inside a virtual environment do not know that they are not running on real hardware. An application will see the same environment, no matter if it is running on real or virtual resources.\nSo it becomes a bit tricky to know whether you’re inside a container or not. There are only a handful of indicators that may or may not exist. Here are couple I came across -\nCheck the /proc/1/cgroup file. For a regular machine, it might look like this -\nvagrant@ubuntu-13:~$ cat /proc/1/cgroup 11:name=systemd:/ 10:hugetlb:/ 9:perf_event:/ 8:blkio:/ 7:freezer:/ 6:devices:/ 5:memory:/ 4:cpuacct:/ 3:cpu:/ 2:cpuset:/ And inside a docker container, it might look like this -\nvagrant@ubuntu-13:~$ docker run busybox cat /proc/1/cgroup 11:name=systemd:/ 10:hugetlb:/ 9:perf_event:/ 8:blkio:/ 7:freezer:/ 6:devices:/docker/3601745b3bd54d9780436faa5f0e4f72bb46231663bb99a6bb892764917832c2 5:memory:/ 4:cpuacct:/ 3:cpu:/docker/3601745b3bd54d9780436faa5f0e4f72bb46231663bb99a6bb892764917832c2 2:cpuset:/ So as you can see, some resources like CPU and devices might use container provider name of control group.\nBut I came across a system where these didn’t exist. The /proc/1/cgroup file had no such control groups or clues.\nInstead they had some clue inside /proc/1/environ, which had might contain a string like container=podman . But this can also be altered with it seems.\nDo you know of more ways of determining this? I’ll find it helpful if you let me know on Twitter/Mastodon.\n","date":1692610873,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1692610873,"objectID":"3e3bbc192361cbd87528a8ec4c840329","permalink":"https://bibhasdn.com/posts/how-to-know-youre-inside-a-container/","publishdate":"2023-08-21T09:41:13Z","relpermalink":"/posts/how-to-know-youre-inside-a-container/","section":"posts","summary":"Scenario: You SSH into an Ubuntu server. How do you know if you just logged in inside a docker container, or just a regular VM?\nTurns out there are no straight answers.\nDocker provides virtualization based on Linux Containers (LXC). LXC is a technology to provide operating system virtualization for processes on Linux. This means, that processes can be executed in isolation without starting a real and heavy virtual machine. All processes will be executed on the same Linux kernel, but will still have their own namespaces, users and file system.\n","tags":["devops","sre","container","linux"],"title":"How to know you're inside a container","type":"posts"},{"authors":null,"categories":["devops","sre","linux"],"content":"In the previous post we figured out how to find the process which is writing an open file. And we also saw that we can kill the process and it’ll stop it from writing to that file. But what if we are not supposed to kill the process? But we still need to close the file.\nFirst we need to figure out the file descriptor for that file for that process.\nLet’s say the file in concern is /sys/fs/cgroup/unified/user.slice/user-1000.slice/user@1000.service (I just picked a random open file from lsof). If you run lsof \u0026lt;filepath\u0026gt; you’ll see something like -\npi@raspberrypi:~ $ lsof /sys/fs/cgroup/unified/user.slice/user-1000.slice/user@1000.service COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 15997 pi 7r DIR 0,24 0 1225 /sys/fs/cgroup/unified/user.slice/user-1000.slice/user@1000.service Here it tells you under the FD column that the file descriptor ID is 7.\nIf you are on a linux system, you can also find this if you know the process ID, by running ls -alh /proc/\u0026lt;pid\u0026gt;/fd, which should give you this output -\npi@raspberrypi:~ $ ls -alh /proc/15997/fd total 0 dr-x------ 2 pi pi 0 Aug 21 17:38 . dr-xr-xr-x 9 pi pi 0 Aug 21 17:38 .. lr-x------ 1 pi pi 64 Aug 21 17:38 0 -\u0026gt; /dev/null lrwx------ 1 pi pi 64 Aug 21 17:38 1 -\u0026gt; \u0026#39;socket:[216233]\u0026#39; lrwx------ 1 pi pi 64 Aug 21 17:38 10 -\u0026gt; \u0026#39;anon_inode:[eventpoll]\u0026#39; lr-x------ 1 pi pi 64 Aug 21 17:38 7 -\u0026gt; /sys/fs/cgroup/unified/user.slice/user-1000.slice/user@1000.service lrwx------ 1 pi pi 64 Aug 21 17:38 8 -\u0026gt; \u0026#39;anon_inode:[timerfd]\u0026#39; lrwx------ 1 pi pi 64 Aug 21 17:38 9 -\u0026gt; \u0026#39;socket:[216245]\u0026#39; Here you you see that the fd `7` is pointing to that file. So, now we know that PID is `15997` and FD is `7`. Now we need to close the file without killing the process. One option available on the web is using `gdb` but I could not test this on the system where I faced this problem because `gdb` was not available and I did not have internet access to install `gdb`. Rather I found another solution that worked. Which is to execute this command - exec 15997\u0026lt;\u0026amp;- 7\u0026gt;\u0026amp;-\n\u0026gt; please be careful when copy pasting a command like this, it can bork your system temporarily In the `exec` command, `\u0026lt;\u0026amp;-` is used to close the standard input (file descriptor 0) of the current process. It redirects file descriptor 0 (stdin) to the special file `/dev/null`, which discards any input. The `\u0026lt;` symbol indicates input redirection, and `-` specifies that the file descriptor should be closed. So, executing `exec \u0026lt;\u0026amp;-` will close the standard input (stdin) of the current process, making it unavailable for any further use. `\u0026gt;\u0026amp;-` is used to close the standard output (file descriptor 1) of the current process. It redirects file descriptor 1 (stdout) to the special file `/dev/null`, effectively discarding any output that would have been written. The `\u0026gt;` symbol indicates output redirection, and `-` specifies that the file descriptor should be closed. So, executing `exec \u0026gt;\u0026amp;-` will close the standard output (stdout) of the current process, making it unavailable for any further use. So executing this command with will close the file descriptor 7 within the process with ID 15997. --- Just for reference, the `gdb` way of doing this I found on the web was - gdb -p $PID p close($FD)\nI\u0026#39;ll try to test this sometime. ","date":1692600901,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1692600901,"objectID":"4fb877fa5e5263ba785b1880225a618d","permalink":"https://bibhasdn.com/posts/closing-a-file-without-killing-a-process/","publishdate":"2023-08-21T06:55:01Z","relpermalink":"/posts/closing-a-file-without-killing-a-process/","section":"posts","summary":"In the previous post we figured out how to find the process which is writing an open file. And we also saw that we can kill the process and it’ll stop it from writing to that file. But what if we are not supposed to kill the process? But we still need to close the file.\nFirst we need to figure out the file descriptor for that file for that process.\n","tags":["devops","sre","linux"],"title":"Closing an open file without killing a process","type":"posts"},{"authors":null,"categories":["devops","sre","linux","bash"],"content":"Scenario: Imagine you login to a server and you find that the disk is filling up rapidly. Either by using df -h or du -h -d1 /\u0026lt;dir\u0026gt; or getting errors like no more disk space left etc. How do you figure out who is filling up the file?\nSolution: Let’s say the file in question is /var/log/badd.log and it’s rapidly filling up.\nFirst step is to use lsof to figure out which process has that file open. To write to a file, any process has to first open that file. So the process will show up in lsof, which is a program to “list open files”. With any luck your output will show up like this -\nubuntu@ip-172-31-32-108:/$ lsof /var/log/badd.log COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME baddlog.py 601 ubuntu 3w REG 259,1 9158 67701 /var/log/badd.log Here we see that the badd.log file is open by a process named baddlog.py and the pid is 601.\nSo if we kill this process, that will stop the process from writing to that file.\n","date":1692598193,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1692598193,"objectID":"7d252822b0ffe27b0a0132e0800f1e3d","permalink":"https://bibhasdn.com/posts/find-which-process-is-writing-to-a-file/","publishdate":"2023-08-21T06:09:53Z","relpermalink":"/posts/find-which-process-is-writing-to-a-file/","section":"posts","summary":"Scenario: Imagine you login to a server and you find that the disk is filling up rapidly. Either by using df -h or du -h -d1 /\u003cdir\u003e or getting errors like no more disk space left etc. How do you figure out who is filling up the file?\nSolution: Let’s say the file in question is /var/log/badd.log and it’s rapidly filling up.\nFirst step is to use lsof to figure out which process has that file open. To write to a file, any process has to first open that file. So the process will show up in lsof, which is a program to “list open files”. With any luck your output will show up like this -\n","tags":["devops","sre","linux","bash"],"title":"Find out which process is writing to a file","type":"posts"},{"authors":null,"categories":null,"content":"Since MS launched S-Presso in Indian market in 2020 there has been much ridicule about this tiny little car because MS sent it for GNCAP testing and it came out with a 0 star rating.\nSadly people remember headlines very well, and MS has shown no effort in correcting this.\nBut interestingly, in 2022, the version of S-Presso that MS sells in African market, got 3 star GNCAP rating! Guess what, both the Indian version and the version that was sold in South Africa are manufactured in India, and both cars are structurally the same. So what’s going on here?\nOk, so the most basic thing about GNCAP testing you need to know about is that when a car gets tested, the manufacturer must send the base variant of the car for testing. Not the fully loaded top variant or any random mid variant. So in 2020 when S-Presso got tested, the base variant of S-Presso MS was selling back then only had one airbag, the driver side airbag, and no seatbelt pretensioners. And if you see the South African version’s crash report, those 2 things are the only different between the base variant that got tested in India, and the version that is sold in SA.\nBut here is the fun part, thankfully, indian govt guideline made dual airbag and seatbelt pretensioners mandatory even in base variant of cars in 2022. So All S-Presso models now come equipped with them. And even the top variant of S-Presso from 2020 was also equipped with them. So essentially if you bought the top variant of S-Presso since 2020, or any variant of it after 2022, it has a 3 Star GNCAP rating because they’re identical to the SA specific version that got tested in South Africa.\nBut of course, people remember headlines all too well. So even now, whenever there is a discussion about this car, people love to bring it up that it has 0 star rating, without knowing any details. And MS has done nothing to correct this. So, 🤷‍♀️.\nThere is some more discussion on TBHP.\n","date":1684793325,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1684793325,"objectID":"e8357606958c0758c50ee26799852b2a","permalink":"https://bibhasdn.com/posts/maruti-suzuki-s-presso-and-gncap-rating/","publishdate":"2023-05-22T22:08:45Z","relpermalink":"/posts/maruti-suzuki-s-presso-and-gncap-rating/","section":"posts","summary":"Since MS launched S-Presso in Indian market in 2020 there has been much ridicule about this tiny little car because MS sent it for GNCAP testing and it came out with a 0 star rating.\nSadly people remember headlines very well, and MS has shown no effort in correcting this.\nBut interestingly, in 2022, the version of S-Presso that MS sells in African market, got 3 star GNCAP rating! Guess what, both the Indian version and the version that was sold in South Africa are manufactured in India, and both cars are structurally the same. So what’s going on here?\n","tags":["suzuki","safety","car","s-presso","maruti"],"title":"Maruti Suzuki S-Presso has a 3-Star GNCAP rating!","type":"posts"},{"authors":null,"categories":["desktop","computer","purchase","gadget"],"content":"Lol. this is a very late blog post. But I wanted to document my desktop config. Otherwise I forget every single time if somebody asks me.\n2021 September, I bought myself a fresh new desktop. I had been using the desktop I got from Sathya since November 2019. It’s still a great machine. And works perfectly. But I wanted a better and faster machine. So I got one.\nI went to Ankit Infotech at SP Road and bought and configured everything on the spot. Thought of buying all the parts and assembling myself. But didn’t have the mental energy to do it. It was an expensive purchase and I just wanted to get it working. So I let the experts handle it. I dont assemble PC that often so have doubts here and there.\nProcessor: AMD Ryzen 5 5600G - It’s an APU with graphics memory. So even without a GPU the desktop can play games on a moderate settings. Even my first and last desktop that I built long long time ago was an AMD Athlon machine. Never had any complain with AMD. And I liked the concept of an APU. Motherboard: ASUS TUF GAMING B550M-PLUS (WI-FI) - M.2 support, BIOS flashback button, WiFi6, 6 USB 3/3.2 ports, USB C port, DisplayPort, and best of all, RGB 😝. RAM: 2 x CORSAIR VENGEANCE® LPX 8GB DDR4 DRAM 3200MHz SSD: 1TB WD Blue SN550 NVMe PSU: Cooler Master MWE Gold 650 V2 - This PSU is all kinds of cool Cabinet: Cooler Master MasterBox MB511 ARGB, with even more RGB! GPU: Still using the GTX970 from Sathya. ","date":1684385901,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1684385901,"objectID":"6388f5c0931458d56e13f260989b3e2f","permalink":"https://bibhasdn.com/posts/my-desktop/","publishdate":"2023-05-18T04:58:21Z","relpermalink":"/posts/my-desktop/","section":"posts","summary":"Lol. this is a very late blog post. But I wanted to document my desktop config. Otherwise I forget every single time if somebody asks me.\n2021 September, I bought myself a fresh new desktop. I had been using the desktop I got from Sathya since November 2019. It’s still a great machine. And works perfectly. But I wanted a better and faster machine. So I got one.\nI went to Ankit Infotech at SP Road and bought and configured everything on the spot. Thought of buying all the parts and assembling myself. But didn’t have the mental energy to do it. It was an expensive purchase and I just wanted to get it working. So I let the experts handle it. I dont assemble PC that often so have doubts here and there.\n","tags":["desktop","computer","purchase","gadget"],"title":"I bought a desktop almost 2 years ago, after ages","type":"posts"},{"authors":null,"categories":["birdwatching","photography","mysore"],"content":"We stayed in HSR Layout, Bangalore for 2.5 years until recently. For the final 6 months or so, everyday evening after 6:30-7, after it was dark, I used to hear this bird’s call. It used to fly by our house why making this loud call, a call I’ve never heard in life, and I couldn’t see it of course in the dark. So even if I wanted to know what bird it is, I couldn’t. And it used to bother me everyday.\nAfter we moved to this new house in Hosa Road last month, I thought I’ll never find out the bird. But even in this house the same thing is happening! The same bird call everyday evening after dark! I dont know if it’s the same bird, but there is a good chance because the path is what it should be, and we’re not very far from the last place.\nAnyway.\nCouple of weeks back we made a trip to Mysore, as posted here. On our second day we decided to make a trip to Sri Venugopala Swamy Temple at the KRS backwater. Right before you enter the temple parking lot, there is a right turn, kind of an off road-ish path, that leads to the backwater where you can touch the water, take a bath, etc. We decided to go park the car near the water there. There is a video of the road leading to this place in the other blog post.\nAnd guess what, just as I got out of the car, I hear the same bird call! I look towards the sound and I see 2 birds playing with each other. I grab the camera and run to take photo of them. But they were a bit far and I didn’t carry a tripod, so only photos I got were a bit shaky and not very clear, but I still got a clear enough photo to ID it.\nIt’s a bird called Red-wattled lapwing.\nRed-wattled lapwing\nYou can hear the bird call on the Wikipedia page. It’s loud!\nIn Bangla, it’s called a হটটিটি. Funny name! 😂\n","date":1681823344,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1681823344,"objectID":"b7950e54dfa5e1b190283e60908e6b11","permalink":"https://bibhasdn.com/posts/unexpected-bird-spotting/","publishdate":"2023-04-18T13:09:04Z","relpermalink":"/posts/unexpected-bird-spotting/","section":"posts","summary":"We stayed in HSR Layout, Bangalore for 2.5 years until recently. For the final 6 months or so, everyday evening after 6:30-7, after it was dark, I used to hear this bird’s call. It used to fly by our house why making this loud call, a call I’ve never heard in life, and I couldn’t see it of course in the dark. So even if I wanted to know what bird it is, I couldn’t. And it used to bother me everyday.\n","tags":["birdwatching","photography","mysore"],"title":"Unexpectedly spotting a bird","type":"posts"},{"authors":null,"categories":["roadtrip","s-presso","mysore"],"content":"A couple friend of Ayanti’s and us decided to go for a road trip on the Easter Friday long weekend. Both families have a kid. They have a 1.5 years old, and our kiddo is 4 months old. But we really wanted to go on a long drive and see how our baby M can handle it. And the shortest yet not so short trip we could think of is to Mysore.\nAs it was long weekend, I knew it’ll be chaos on Friday on the way to Mysore. The new Bangalore-Mysore Expressway just opened and it’s still not operating fully, and has loops and holes that lets in auto rickshaws, cycles, bikes etc. Add to that all the “very enthusiastic” Bangalore crowd, and that road becomes a bit risky. So we decided to leave on Thursday morning.\nOn the days leading to the trip, I cleaned up Bilbo a bit, got a 70Mai A500S dual channel dashcam, and an automatic tire inflater. On the morning of the trip I went and filled up the tires till 35-36PSI. My normal tire pressure is 32. But the manual says to fill up 3-4PSI more if I’m planning to take the car on highway for long drive. The tire inflater works fine but a bit noisy. But I don’t mind. It worked well. While filling the front left tire, the 2-way valve I had installed for the TPMS, got stuck in leaky setup somehow and air is continuously coming out if I use it now. so I just opened it and put the TPMS sensor directly to the tire valve. Might replace it soon.\nDay 1 We wanted to leave early, but by the time we got up, the househelp cleaned up the house, we fed the kids and cleaned up the house, it was 12:30PM. 🤣 And we headed out. Thankfully I filled up the tank the day before. So that saved some time.\nWe live very close to Electronic city, so getting on NICE road is very easy. But parts of NICE road is being white-topped now. So they diverted all the traffic to one side of NICE road and that restricted our movement for quite a white.\nRight before we got to the new Mysore-Bangalore expressway tollbooth, we saw that literally all the cars except 1-2 are taking the service road and not the expressway. It wasn’t clear why at that point but it became clear soon. Turns out the expressway is not complete and they let cars come in from service road right after the toll booth. And all the cars are taking the service road to avoid the toll. And despite the road not being complete, they charged Rs 125 for toll from those of us who decided to take the expressway the legal way. Proud to contribute to this system that benefits those who break rules.\nAnyway, the road quality is decent. So that’s something.\nWe decided to stop at this McDonald’s near Maddur for lunch because we wanted to stop somewhere with AC, and this place had a darshini-like place and a petrol pump beside it. So we thought it’ll be a good place. But upon arrival we saw that the McDonald’s has closed down and none of the AC works there. So we decided to just head for Maddur Tiffany’s which was around 8km ahead. I wanted to try the Maddur vada there as they’re said to be the inventor of maddur vada.\nOn our way to Maddur tiffany’s we got stopped once by the police. They asked for PUC, insurance, RC, and DL. Which I had. He saw that my rear glass is shaded and said, “tinted glass?”, I showed him that it’s just a shade over the regular glass. And then he for some reason got pissed and barked at me to move on. Less money for chai-pani for him I guess.\nAyanti and the kid didn’t go out of the car and it was scortching hot outside. I am thankful for having the car at least once a day nowadays. The AC itself is a boon on our roads. We fed the kid once there and we had a plate of veg biryani. It was decent. Maddur vada with the chutney was decent as well. We packed some for snacking later on. We then headed out for the rest of the trip.\nIt was mostly smooth sailing, except couple of stretches where the road is still not complete and we had to take diversion. Also, because they let is traffic from random service roads, there were auto, bike etc on the expressway.\nWe at first thought we’ll go to the Venugopalaswamy Temple at the KRS backwater that day. But it was still pretty sunny and bright so we decided to avoid it and headed for SAPA Bakery. I’ve been following them for a while and wanted to visit them.\nWe really loved the place. Definitely will go back again.\n(Thanks to the baby on the lap, I barely got to take any photos on this trip. So it’s mostly gonna be text.)\nAfter being done with SAPA, we headed to our airbnb, ordered some food, and retired for the day.\nDay 2 Our friends decided to hit the Zoo in the morning, but we skipped because we’ve been there before and Ayanti didn’t get much sleep the night before because of the kid. So while they visited the zoo, we took naps and got enough rest. They had lunch at New Mysore Refreshments opposite the zoo and packed some dosa for us. After they’re back, we decided to got for a short road trip to Sri Venugopalaswamy Temple on KRS Backwater.\nAt first we drove towards the entrance to the Nagarhole forest path. We …","date":1681302255,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1681302255,"objectID":"402174c0ba0432a175d7c980acb8f202","permalink":"https://bibhasdn.com/posts/mysore-road-trip-april-2023/","publishdate":"2023-04-12T12:24:15Z","relpermalink":"/posts/mysore-road-trip-april-2023/","section":"posts","summary":"A couple friend of Ayanti’s and us decided to go for a road trip on the Easter Friday long weekend. Both families have a kid. They have a 1.5 years old, and our kiddo is 4 months old. But we really wanted to go on a long drive and see how our baby M can handle it. And the shortest yet not so short trip we could think of is to Mysore.\n","tags":["roadtrip","s-presso","mysore","travel"],"title":"Mysore road trip April 2023","type":"posts"},{"authors":null,"categories":["yearly","life"],"content":"What we did in 2022 -\n2022 Wrap-up collages 5 new items added to shared album Google Photos Bought our first ever car in January - a Maruti Suzuki S-Presso top end automatic. We got a pretty good deal from Spinny and the car was in near mint condition. No regret. We’ve been using it to it’s limit. Drove about 6.5k kilometer this year. Which includes a 800km road trip. Very happy with the purchase. We named it Bilbo. Because it’s short and stacked, and loves adventure. 😊 Completed 6 years being married to A. And about 11 years since we met each other. We’re very proud of each other for where we are right now. And our life is just starting. Lot more to do and look forward to. Visited Pyramid valley in February. Wanted to visit for a long time. The car kind of gave us wings. Got my dad’s cataract surgeries done from Sankara Eye Hospital in Marathalli. Really good experience. Costed around 25k for each eyes. He can see lot better now, writing this on 1st January 2023. Mom also got an instant laser procedure done that improved her vision. We consulted Dr Meena. Recommend her and Sankara hospital for any glaucoma and eye related issues as well. Had the first tyre puncture. Bought a telephoto lens for my Fuji XT-100. The lens purchase was in preparation for our first long road trip, just the 2 of us. We covered 800km. Bangalore - Srirangapatna - Gonikoppa - Kushalnagar - Hassan - Mysore - Bangalore. It was top notch fun and the car performed beautifully. April is also the month when we got to know that we were expecting. Thus started our year long journey of anticipation and preparation. Ayanti’s parents visited us in May. 4 of us siblings went and watched Doctor Strange: Multiverse of Madness (MoM), which was also mostly about motherhood. In June, we visited IKEA in Bangalore on it’s first day, Our first visit to a IKEA. We had fun. Nice road trip through NICE road. After this I visited IKEA 3 more times I think. By June last week I got done with the visa application for my trip to Sweden in August. Got my visa in July. Attended India FOSS in July as well. Had fun. Met so many friends after so long. 12-31st August was the Sweden trip. So much happened. Have about 1500+ photos of the whole trip. Need to print some and keep. Video of what we did - https://www.youtube.com/watch?v=x0exy4SCBdI In September, we made some big purchase in anticipation of the upcoming new person. A huge bed from Wakefit and a Samsung front load washing machine. In September, I went for a photowalk after ages with Rustik Travel in KR Market, Bangalore. Durga puja started in September. My parents, sister, brother-in-law, niece all came to Bangalore and we had a lovely time. Went to few pandals. Couldn’t go to too many of them because A wasn’t supposed to move around a lot. 5th October we had the baby shower. My whole family and A’s whole family were in Bangalore. Sharath, Sneha, Sounava and Shreya also joined. We had great fun. 5th November was Barcamp Bangalore. First time I helped organize BCB. Learned a lot. And also met a lot of friends. By November, we started buying baby stuff. This was the last leg of the journey. So we became ultra cautious and started preparing for the new member’s arrival. 30th November A’s mom cooked meals for A. Bidisha, Deep, Arna, Arpita, and Adhrit came to visit. At last, 9th December early morning we left for the hospital. And soon after the admission, the delivery happened. And baby M arrived in our lives. This probably merits a completely separate post. About what we experienced in the whole journey and how we felt. Should write it down before we forget. As I write this, baby M is 3 weeks old. Can’t believe it’s already been 3 weeks. But we’re still here and we’re thriving. In 2023, we have a ton of plans. Let’s hope for the best. If you’re reading this. send us all your best wishes. Hope that your year is awesome and full of new experiences as well. Enjoy.\n","date":1672638658,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1672638658,"objectID":"f06a039e0079eb53b44561d42ac15d97","permalink":"https://bibhasdn.com/posts/2022-wrap-up/","publishdate":"2023-01-02T05:50:58Z","relpermalink":"/posts/2022-wrap-up/","section":"posts","summary":"What we did in 2022 -\n2022 Wrap-up collages 5 new items added to shared album Google Photos Bought our first ever car in January - a Maruti Suzuki S-Presso top end automatic. We got a pretty good deal from Spinny and the car was in near mint condition. No regret. We’ve been using it to it’s limit. Drove about 6.5k kilometer this year. Which includes a 800km road trip. Very happy with the purchase. We named it Bilbo. Because it’s short and stacked, and loves adventure. 😊 Completed 6 years being married to A. And about 11 years since we met each other. We’re very proud of each other for where we are right now. And our life is just starting. Lot more to do and look forward to. Visited Pyramid valley in February. Wanted to visit for a long time. The car kind of gave us wings. Got my dad’s cataract surgeries done from Sankara Eye Hospital in Marathalli. Really good experience. Costed around 25k for each eyes. He can see lot better now, writing this on 1st January 2023. Mom also got an instant laser procedure done that improved her vision. We consulted Dr Meena. Recommend her and Sankara hospital for any glaucoma and eye related issues as well. Had the first tyre puncture. Bought a telephoto lens for my Fuji XT-100. The lens purchase was in preparation for our first long road trip, just the 2 of us. We covered 800km. Bangalore - Srirangapatna - Gonikoppa - Kushalnagar - Hassan - Mysore - Bangalore. It was top notch fun and the car performed beautifully. April is also the month when we got to know that we were expecting. Thus started our year long journey of anticipation and preparation. Ayanti’s parents visited us in May. 4 of us siblings went and watched Doctor Strange: Multiverse of Madness (MoM), which was also mostly about motherhood. In June, we visited IKEA in Bangalore on it’s first day, Our first visit to a IKEA. We had fun. Nice road trip through NICE road. After this I visited IKEA 3 more times I think. By June last week I got done with the visa application for my trip to Sweden in August. Got my visa in July. Attended India FOSS in July as well. Had fun. Met so many friends after so long. 12-31st August was the Sweden trip. So much happened. Have about 1500+ photos of the whole trip. Need to print some and keep. Video of what we did - https://www.youtube.com/watch?v=x0exy4SCBdI In September, we made some big purchase in anticipation of the upcoming new person. A huge bed from Wakefit and a Samsung front load washing machine. In September, I went for a photowalk after ages with Rustik Travel in KR Market, Bangalore. Durga puja started in September. My parents, sister, brother-in-law, niece all came to Bangalore and we had a lovely time. Went to few pandals. Couldn’t go to too many of them because A wasn’t supposed to move around a lot. 5th October we had the baby shower. My whole family and A’s whole family were in Bangalore. Sharath, Sneha, Sounava and Shreya also joined. We had great fun. 5th November was Barcamp Bangalore. First time I helped organize BCB. Learned a lot. And also met a lot of friends. By November, we started buying baby stuff. This was the last leg of the journey. So we became ultra cautious and started preparing for the new member’s arrival. 30th November A’s mom cooked meals for A. Bidisha, Deep, Arna, Arpita, and Adhrit came to visit. At last, 9th December early morning we left for the hospital. And soon after the admission, the delivery happened. And baby M arrived in our lives. This probably merits a completely separate post. About what we experienced in the whole journey and how we felt. Should write it down before we forget. As I write this, baby M is 3 weeks old. Can’t believe it’s already been 3 weeks. But we’re still here and we’re thriving. In 2023, we have a ton of plans. Let’s hope for the best. If you’re reading this. send us all your best wishes. Hope that your year is awesome and full of new experiences as well. Enjoy.\n","tags":["yearly","life"],"title":"2022 Wrap-up","type":"posts"},{"authors":null,"categories":["life","weekly","update"],"content":"Taking a leaf from Thej’s book, I’m gonna try posting weekly updates about what I’m doing, as a journal. I don’t do a lot of significant things. But this could be a good way to remember bits and pieces. Let’s go.\nThis week was spent mostly recovering from last week. The week before brother in law got hospitalized for dengue. Parents were with us in Bangalore and my sister was alone with niece handling everything alone. So had to send parents home. Had to drive to the airport twice. It was exhausting. Cover photo is from last Friday when I went to the airport to drop dad. Went to the back side of the airport where the runway ends and flights take off from. Really nice spot to just sit and chill for a while. With flights taking off every 5 minutes or so. Did a lot of cooking this week. Ayanti can’t stand around for long time now. So it’s mostly on me to keep the house and food scene in order. We’ve entered the last month. So it’s getting a little tense. Spending a lot of energy to keep the peace of mind. Barcamp Bangalore is tomorrow. It was my responsibility to get the banners and sticklers etc printed. Gave for printing yesterday. Collected them today. They came out really well. I didn’t know that flex banners are banned now. They’ve substituted it with a cloth like material. Lightweight. Hopefully better for environment. Thinking about that is also a bit of a moot point. sigh. Didn’t get much sleep last night because upstair neighbours were playing loud music at 3AM. Have to drive to the RV University tomorrow early morning. Need to get some proper sleep tonight. Been a while since I helped organize an event. A bit nervous. Found a shop in HSR that sells refurbished laptops, macbooks, iPads etc. I need a personal laptop as I’ve been doing personal stuff on work laptop and I want to stop that. Asked them to let me know if they get a Thinkpad X1 Carbon. They called me after a day. But I couldn’t find time to go see it. Maybe next week. Also a bit cautious about spending that kind of money right now. Going to need cash next month. will update if I remember anything else. ","date":1667557410,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1667557410,"objectID":"f0827f7c2b162720a6cdef70e60f6778","permalink":"https://bibhasdn.com/posts/weekly-update-4th-oct-2022/","publishdate":"2022-11-04T10:23:30Z","relpermalink":"/posts/weekly-update-4th-oct-2022/","section":"posts","summary":"Taking a leaf from Thej’s book, I’m gonna try posting weekly updates about what I’m doing, as a journal. I don’t do a lot of significant things. But this could be a good way to remember bits and pieces. Let’s go.\nThis week was spent mostly recovering from last week. The week before brother in law got hospitalized for dengue. Parents were with us in Bangalore and my sister was alone with niece handling everything alone. So had to send parents home. Had to drive to the airport twice. It was exhausting. Cover photo is from last Friday when I went to the airport to drop dad. Went to the back side of the airport where the runway ends and flights take off from. Really nice spot to just sit and chill for a while. With flights taking off every 5 minutes or so. Did a lot of cooking this week. Ayanti can’t stand around for long time now. So it’s mostly on me to keep the house and food scene in order. We’ve entered the last month. So it’s getting a little tense. Spending a lot of energy to keep the peace of mind. Barcamp Bangalore is tomorrow. It was my responsibility to get the banners and sticklers etc printed. Gave for printing yesterday. Collected them today. They came out really well. I didn’t know that flex banners are banned now. They’ve substituted it with a cloth like material. Lightweight. Hopefully better for environment. Thinking about that is also a bit of a moot point. sigh. Didn’t get much sleep last night because upstair neighbours were playing loud music at 3AM. Have to drive to the RV University tomorrow early morning. Need to get some proper sleep tonight. Been a while since I helped organize an event. A bit nervous. Found a shop in HSR that sells refurbished laptops, macbooks, iPads etc. I need a personal laptop as I’ve been doing personal stuff on work laptop and I want to stop that. Asked them to let me know if they get a Thinkpad X1 Carbon. They called me after a day. But I couldn’t find time to go see it. Maybe next week. Also a bit cautious about spending that kind of money right now. Going to need cash next month. will update if I remember anything else. ","tags":["life","weekly","update"],"title":"Weekly update - 4th Nov 2022","type":"posts"},{"authors":null,"categories":["durgapuja","bangalore","map"],"content":"Every year I try to make a map of all the pujas in Bangalore to help my friends, those who are looking to go pandal hopping, and more importantly myself. Couldn’t make it last couple of years for obvious reasons. But did it this year. I went through my old maps and tracked down as many pujas as I could. Some of them moved to different venue, some of them aren’t seem to be there anymore, and there are new ones around. Sharing the map with everyone here so that you can all enjoy this puja. Happy Durga Puja 2022.\nI’ve included all the public pujas I could find. I’ve excluded the private pujas inside gated communities because I don’t know if they are open to public. If you know of any puja that I’ve missed, please to ping me, I’ll add them.\n","date":1664542343,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1664542343,"objectID":"95d18121382b23a69ba0925ff98e81b1","permalink":"https://bibhasdn.com/posts/durga-puja-2022-bangalore-map/","publishdate":"2022-09-30T12:52:23Z","relpermalink":"/posts/durga-puja-2022-bangalore-map/","section":"posts","summary":"Every year I try to make a map of all the pujas in Bangalore to help my friends, those who are looking to go pandal hopping, and more importantly myself. Couldn’t make it last couple of years for obvious reasons. But did it this year. I went through my old maps and tracked down as many pujas as I could. Some of them moved to different venue, some of them aren’t seem to be there anymore, and there are new ones around. Sharing the map with everyone here so that you can all enjoy this puja. Happy Durga Puja 2022.\n","tags":["durgapuja","bangalore","map"],"title":"Durga Puja 2022 Bangalore Map","type":"posts"},{"authors":null,"categories":["birdwatching","mysore","photography","roadtrip"],"content":"I got a 50-230mm lens for my Fuji X-T100 few days back. Right before we went on our first road trip in the new car. So I thought I’ll make some good use of the lens and capture some birds. Till now even if I saw a bird, I’d never be able to know what it is because I couldn’t take a photo of them as they’re usually very far away, and also I wouldn’t even remember that I saw them by the time I get to home. Not anymore.. So here are some of the different species of birds we saw during our 4 day long road trip (a blog post about it is coming soon).\nFuji X-T100 with 50-230mm lens\nNear Pandavapura on NH150A We stopped for a bit near the Pandavpura Lake and saw these fellows hanging around.\nGrey-headed Swamphen Grey-headed swamphen\nThese are mostly seen in south-east Asia, middle-east, and in some parts of Italy for some reason.\nIndian pond heron Indian pond heron\nAlmost exclusive to Indian subcontinent, and in Taiwan for some reason.\nCommon Myna Indian/Common Mynas (Shalik) on top of a buffalo\nLooks like these are seen in most part of the world, except big chunk of USA, Europe and Africa, Russia, South America and Canada. I wonder why they’re only seen in Florida and not in rest of the USA.\nRanganathittu bird sanctuary This place has tons of birds that are both native and migratory. But due to lack of time, I could only take photos of some of them.\nSpot-breasted fantail Spot-breasted fantail\nThese are almost exclusive to India. At first we thought this is White-throated Fantail, but then we saw on iNaturalist that White-throated Fantail can’t be seen in these parts of India. Then dug a little more to realize that this is Spot-breasted Fantail.\nSpot-billed pelican Spot-billed pelican\nMostly seen in south-east Asia. These are big birds. Can be upto 152 cm long. These flying around reminded us from scenes of Jurassic Park.\nCattle egret Cattle egret\nCattle egret on hunting mode, with Black-headed Ibis at the back\nThese are seen almost everywhere in the world, except cold regions.\nPainted stork and Black-headed Ibis Painted stork, with black headed Ibis at the back\nPainted stork observations\nBlack-headed Ibis observations\nThey’re again mostly south-east asian birds.\nGreat cormorant Great cormorant\nThese are seen roughly everywhere in the world, except most of USA, Canada and South America.\nAsian openbill Asian openbill\nMostly seen in south-east Asia.\nWhite-browed wagtail White-browed wagtail\nThese are almost exclusive to Indian subcontinent.\nKushalnagar Crested serpent eagle Crested serpent eagle\nThis was a lucky find. We stopped to top-up the petrol tank beside an open area full of green, and saw this fellow sitting on top of a tree. Could not get a clear shot because of a branch and I didn’t have enough space to move around. Again, mostly in south-east Asia.\nMost likely Black Drongo Most likely black drongo\nThis was a lucky spot at the Nisargadhama deer park. Ayanti saw it far far away behind a barrier. Only had few moments to take this photo.\nHassan White-cheeked barbet White-cheeked barbet\nCuriously, this bird is exclusive to the western ghat region of India! Saw it from our hotel window after waiting for like half an hour for a clear shot.\nMysore Common Hoopoe Eurasian hoopoe !\nSpotted this at Mysore. Looks like it’s very much exclusive to the piece of land that consists of Africa, Europe and Asia. Somehow somebody spotted one in Australia too it seems. Curious.\n[Yellow-billed babbler](Yellow-billed babbler) Yellow-billed babbler\nHow interesting is that this bird almost entirely exists in the southern part of India and Sri Lanka.\nPurple sunbird Purple sunbird\nThe friend’s place we went to in Mysore mentioned that a bird made home in their balcony inside a discarded piece of cloth, and it’s very fast, and wished me luck to take a photo of it. How lucky am I.\nI really enjoyed spotting these birds and taking photos of them. I really hope to continue doing this. I’ll post photos of more birds I see around.\n","date":1650501049,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1650501049,"objectID":"0094caeaff49bc388364a8e9df53ee5e","permalink":"https://bibhasdn.com/posts/birds-from-our-road-trips-1/","publishdate":"2022-04-21T00:30:49Z","relpermalink":"/posts/birds-from-our-road-trips-1/","section":"posts","summary":"I got a 50-230mm lens for my Fuji X-T100 few days back. Right before we went on our first road trip in the new car. So I thought I’ll make some good use of the lens and capture some birds. Till now even if I saw a bird, I’d never be able to know what it is because I couldn’t take a photo of them as they’re usually very far away, and also I wouldn’t even remember that I saw them by the time I get to home. Not anymore.. So here are some of the different species of birds we saw during our 4 day long road trip (a blog post about it is coming soon).\n","tags":["birdwatching","mysore","photography","roadtrip"],"title":"Birds from our road trips - #1","type":"posts"},{"authors":null,"categories":["roadtrip","bangalore"],"content":"March 18-19-20 was a long weekend. While couldn’t go somewhere out of town for couple of days, because we already had some other plans, we decided to go for a day trip. None of us ever visited Dodda Alada Mara. And it’s not that far. So decided to go there. Sounava decided to join us in his newly bought car.\nInitially our plan was to not stop anywhere for too long, have quick lunch and touch these 4 points in blue marker towards Magadi road.\nClockwise from top - Chamaraja Sagara dam, Dodda Alada Mara, Manchanabele dam and Savandurga hill\nWe just wanted to drive past the dams and Savandurga hill, and not spend much time anywhere. But of course plan changed.\nFirst we reached Dodda alada mara and found that it’s not a big place and there isn’t much to see. But it’s a fascinating piece of history though. The tree was planted roughly around when Shah Jahan was ruling in Delhi, and when Taj Mahal was built. Tipu Sultan was yet to born. Almost all of south India was under the Wodeyar kingdom.\nBut unfortunately the original root of the tree no longer exists as it died of natural illness few years back. The whole tree right now is standing on the hundreds of aerial roots. There is some sort of philosophical point here somewhere.\nPhoto courtesy Aditi Mullick\nWe spent some 15 minutes there. Took some photos. And by the time we’re done, it was almost lunch time. So we decided to head for this place called Ranch, at Big Banyan Vineyard \u0026amp; Resort, which was barely 1km further down the road from Dodda alada mara. The photos we saw of the place looked good and it had good rating, so we decided to head there.\nEntrance of Ranch at Big Banyan. Photo courtesy Sounava Ghosh.\nFor some reason they only had buffet that day for lunch. It was Rs 1500+tax, which was a bit steep, but we decided to go for it because we liked the ambience and environment, and going around to find another place to eat will surely cost us time and effort.\nThey also had an alcohol buffet for 2500+tax. We’re not big on drinking, so avoided that. Mentioning it here if anyone wants to go get wasted.\nRosé, Live counter, some parts of buffet. Photos by Sounava and Ayanti. The buffet was massive. There was live counters outside for pasta and BBQ. We took some meat from there. Took a bit more than we should have, which we realized later when we visited the main food section.\nThe buffet line was like 30 feet of different dishes on both sides. And to our good fortune, the food was good. We really enjoyed the meal. We also took a bottle of Rosé from the Big Banyan vineyard itself, and we really liked that as well. So much that I bought a bottle of that after coming back home and that bottle is close to it’s end.\nWe entered that place at 1:40PM and left at 4:20PM. We could have left earlier, but we really wanted to avoid the sun and enjoy the food. Plus I wanted to digest the tiny amount of Rosé I had.\nSome notable shots from the Big banyan resort After that we saw that we had just enough time left to go visit Manchanabele dam, and couldn’t visit the other 2 places. We decided to just do that. So we headed for the dam. It was a winding road through some villages. We saw the massive antenna of the Indian Deep Space Network (IDSN). It was a sight to behold.\nPhoto by Aditi\nThe best part is right when you take the turn and reach this exact location - https://goo.gl/maps/zP625y7QiW9PBoSh8\nThe view of the dam from that point just blew our mind. It cannot be expressed even in photos/videos. You have to go and see it yourself. The road suddenly moves downhill and the dam becomes visible, almost as if like you’re going to drive straight down to the water. 🤯\nManchanabele reservoir\nThe dam’s official entrance was closed for public due to COVID. There were side paths that you could walk and climb to get on top of the dam, but we decided against that as it was getting late. Suddenly some cloud showed up and essentially sun had set an hour and a half early. We didn’t want to drive much longer on NICE road in dark. So we headed out.\nManchanabele dam I thought the day had ended but we still had some experience left to be had. We had to get on the NICE road from Mysore road junction. And the traffic there was nothing short of a rendition of Mad Max Fury Road. Almost got hit by a bus, a traveller minibus, and an old Santro Xing, all of who either happily avoided my indicator, or didn’t care to look at their rear view mirrors before making turns. Important lesson I got that day. Going to avoid Mysore road-NICE road junction in the evening at all costs from now on.\nIt was another lazy daytrip of about 100km in total. I need to head for a 150km+ trip next time.\nTrip map from HSR layout to Manchanabele dam, through Dodda alada mara\n","date":1648516876,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1648516876,"objectID":"ae8a3c7b1388906bc66e6bb1fe782b52","permalink":"https://bibhasdn.com/posts/road-trip-to-dodda-alada-mara-and-manchanabele-dam/","publishdate":"2022-03-29T01:21:16Z","relpermalink":"/posts/road-trip-to-dodda-alada-mara-and-manchanabele-dam/","section":"posts","summary":"March 18-19-20 was a long weekend. While couldn’t go somewhere out of town for couple of days, because we already had some other plans, we decided to go for a day trip. None of us ever visited Dodda Alada Mara. And it’s not that far. So decided to go there. Sounava decided to join us in his newly bought car.\nInitially our plan was to not stop anywhere for too long, have quick lunch and touch these 4 points in blue marker towards Magadi road.\n","tags":["roadtrip","travel","bangalore"],"title":"Road Trip to Dodda Alada Mara and Manchanabele Dam","type":"posts"},{"authors":null,"categories":[],"content":"After 2 weeks of downtime since the Gulakamale Lake trip, we found a Sunday with nice and cool weather. So in a plan made in half an hour, we head out to explore one of the places I always wanted to go check. It’s a Pyramid at the outskirt of Bangalore.\nPyramid Valley International from the lawn outside\nPyramid Valley International is a serene place on Kanakpura Road, with a vast area full of greenery, and in between all that, a pretty big Pyramid.\nI was always curious to go check it out in person and see what’s inside the Pyramid. But never got a chance. But now that we have a car, who’s stopping us?\nTrip to Pyramid Valley International\nFYI, as of Feb 6, 2022, Kanakpura road is in a horrible state. It was difficult to go above 40kmph, and we mostly had to keep the speed below 30kmph to save the hip of everyone in the car. So if you’re taking that road, you’ve been warned.\nKanakpura Road\nBut all the signs of torment went away from our face when we entered the PVI compound.\nSurroundings of Pyramid Valley International At first we thought we were the only ones to be there because we saw almost no cars leading up to PVI, but the moment we took the turn towards the parking area, we were proven wrong. The parking lot was almost full. They took Rs 50 as either entree fee or parking fee, not sure. But that was the only money we paid.\nFrom that point on, it was a pretty chilled place. Lot of trees. There is a small water body that has some scope of boating. Lot of people were boating around in there. We didn’t go because we were not interested. We walked straight up to the Pyramid because that’s where my interest lied.\nPyramid Valley International is primarily intended to help people meditate, and learn meditation. While walking to the Pyramid, we saw signboards mentioning that they even have 6-12 months long certification course on Yoga. It’s a pretty spiritual place. Not really religious. There were few statues of Gautam Buddha around. But as all Buddist places of worship, everybody felt pretty much at peace. No security check like at a lot of religious places. Nobody even came to check my backpacks. We just straight up walked into the Pyramid. And it was an experience I’ll remember for a while.\nThe inside of the Pyramid has a dark chamber, of pyramid shape even in the inside. With at least 100 chairs all around. And it was one of the most quiet place I’ve experienced in a while. You could literally hear a pin drop even if 100 people were sitting there. It was about 25% full when we entered it. And everybody was peacefully quiet. Nobody was checking their phones. Everyone was just sitting there.\nI’d have sat there for sometime. But I really can’t take that much quiet. I feel very uneasy in my head if I don’t have some kind of background noise. But if you like quiet place, and/or if you like to meditate, you should definitely visit the place.\nI’m not a religious person. Don’t know if I believe in spirituality. But I believe in good vibes from people and places. And this place definitely gave a lot of that. The only negativity I could find there was what I carried myself.\nThere was a small gift shop and book shop. We didn’t buy anything. We head out to the lawn where there were places to sit and chill. It was pretty nice. You can go there in the morning, and lie down and sleep all day long, and nobody would come and bother you. There is a real lack of that kind of freedom in the public/private places around us. I really admired it.\nGrass\nAfter spending some time there, we decided to head to the cafeteria and have some coffee, and then head out because it was getting dark. And at that moment I was still not feeling comfortable driving in the dark on a highway. But as luck would have it, that happened anyway.\nI really wanted to avoid Kanakpura road while coming back. But all the other detours would add at least 1 more hour to the journey through forest/village roads, and it was already getting dark. So decided to suck it up and just take the same road back. And that turned out to be a good decision.\nThe road towards Bangalore was a little less messed up than the other side. So I could speed up a bit.\nThen the fun part happened. If you see the map above, we made a stop near this area called Chikkanagipalya. Because, right on the Kanakpura road there (approx location), there were couple of roadside vegetable markets, and my mom got super excited to see fresh veggies. So we stopped beside one of the markets. And mom just went crazy. For about half an hour she shopped about 10kgs of veggies, which costed about Rs 350. The veggies were really good quality and inexpensive. Writing this after about a week of having them, they were really good.\nVeggie loot And then when we finally decided to leave, sun has set, and by the time I got on to NICE road, it was properly dark.\nNICE road at night\nIt was a really fun experience to drive on a highway in dark. Had to be constantly cautious because I could only see headlights in the …","date":1644134340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1644134340,"objectID":"0792d57bb7db731be06a961dd4afb54b","permalink":"https://bibhasdn.com/posts/road-trip-to-pyramid-valley-international/","publishdate":"2022-02-06T07:59:00Z","relpermalink":"/posts/road-trip-to-pyramid-valley-international/","section":"posts","summary":"After 2 weeks of downtime since the Gulakamale Lake trip, we found a Sunday with nice and cool weather. So in a plan made in half an hour, we head out to explore one of the places I always wanted to go check. It’s a Pyramid at the outskirt of Bangalore.\nPyramid Valley International from the lawn outside\nPyramid Valley International is a serene place on Kanakpura Road, with a vast area full of greenery, and in between all that, a pretty big Pyramid.\n","tags":["roadtrip","travel"],"title":"Road trip to Pyramid Valley International","type":"posts"},{"authors":null,"categories":[],"content":"News flash: We finally took the leap and got a car. A Maruti Suzuki S-Presso. We got a pre-loved one from spinny.com. It was delivered a month back. And after spending couple of weeks to gain some confidence driving around, we decided to go for a long-ish trip.\nFew months back we went to this place called Gulakamale Lake that’s in between Banerghatta Road and Kanakpura Road. And we really loved the road leading to it from Banerghatta Road. The road goes through the Kaggalipura- Bannerghatta Forest. And it’s really nice if the weather is good.\nThis time the weather was really not in our favor. It was insanely sunny and hot. But we went out anyway because we were all frustrated being stuck at home thanks to the third wave. And the weekend we chose was the first weekend after weekend curfew was withdrawn. So despite the weather, we decided to head out.\nThe cover photo of the lake is from our first trip when the weather was actually good.\nThe first stop was to the Shell pump near our place, and got the tank full. The shell pump almost fely like a cyberpunk place. The hose for the fuel was hanging from the roof, and the attendants had android phones on their wrist which they used to manage the amount of fuel needed, and generate the receipt etc. It was pretty fun.\nThen also got air pressure checked in all wheels, and fill them up. Was surprised to find that Shell pumps dont really charge for it. But the attendant said that if you give some tip, they’d be happy. It was an interesting experience.\nThen we headed out.\nAnother first time experience was using Fastag on a highway. I got a Fastag from Paytm 3-4 days before and was a bit anxious whether I stuck it in the right place and if it’ll get scanned properly. But thankfully, everything went smoothly. Paytm sent SMS confirming the charge within 15 minutes or so.\nDriving on NICE road was also quite the experience. First time I got to drive over 80kmph. The car handled it adequately enough. I was getting mileage around 18-20kmpl on the highway if I believe the car’s system. Which was pretty good. I’m yet to calculate the mileage myself. But the fuel level seems to agree with it so far.\nHere are some photos from the trip -\nTrip to Gulakamale lake And here is out ride resting under some shade beside the lake -\nMaruti Suzuki S-Presso under shade of some trees\nNote: Almost all photos are courtesy of Ayanti.\nWhile coming back we stopped at the Cafe Coffee Day at Brigade Meadows on Kanakpura road. We freshened up a bit and had a small lunch there before heading back.\nIt was still pretty much sunny when we were done. So we decided to come back via the same road across Banerghatta forest instead of coming through Kanakpura road.\nIt was a fun 70-ish km drive. And the best thing is it got me enough confidence to go on long drives more frequently.\n","date":1642923840,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1642923840,"objectID":"9d2971ca0a2866284bd3d0178310b9df","permalink":"https://bibhasdn.com/posts/road-trip-to-gulakamale-lake/","publishdate":"2022-01-23T07:44:00Z","relpermalink":"/posts/road-trip-to-gulakamale-lake/","section":"posts","summary":"News flash: We finally took the leap and got a car. A Maruti Suzuki S-Presso. We got a pre-loved one from spinny.com. It was delivered a month back. And after spending couple of weeks to gain some confidence driving around, we decided to go for a long-ish trip.\nFew months back we went to this place called Gulakamale Lake that’s in between Banerghatta Road and Kanakpura Road. And we really loved the road leading to it from Banerghatta Road. The road goes through the Kaggalipura- Bannerghatta Forest. And it’s really nice if the weather is good.\n","tags":["roadtrip","travel"],"title":"Road trip to Gulakamale Lake","type":"posts"},{"authors":null,"categories":[],"content":"insert markdown image Late update. I’ve joined NUITEQ as a Senior Software Engineer at the beginning of this month.\n20th June was my last day of work at Hasgeek. And it was a bit emotional to attend the standup that day.\nI’ve known of and been around Hasgeek since the beginning of my career. A lot of the people I know today so well, I know them through Hasgeek. And similarly, a lot of what I am today is because of the people I met through Hasgeek.\nI joined Hasgeek in 2017 as a full time developer. And that changed how I think about a workplace by quite a bit. There are few things that got embedded in me during my time at Hasgeek -\nClean code can remove half (if not more) of the future headaches. So put more energy behind writing clean and efficient code. Bad code that works will eventually encourage more bad code, and become a monster in future. Coding is the least important part of the job of a software engineer. If the first instinct you have, when faced with a problem at your job, is to write some code to solve it, more often than not it ends up becoming the wrong decision. It’s much more fruitful and important to think about why that problem occurred. And often what you thought could be solved with a 1 line PR, will end up revealing a big gap in the architecture of the system or UX. So always spend time asking why a particular issue occurred from the user’s perspective. Building software is not the job. The job is to provide users with some agency. We’re building softwares to help users achieve something. That is where all conversation about building a feature or fixing a bug should begin. Human relationships are much more important than tech skills. We can only learn so many things in our lives. Whatever you learn today will be outdated tomorrow. So running after the bleeding edge tech is always a futile exercise. Learn what you need to, get the work done. But what stays with us in long term are the human relationships we make or create through our skills and work. Hasgeek also taught me how to work in a diverse and inclusive workplace, with no BS politics at work, and everything is communicated clearly with everyone. And all discussions circled around how to make the life of the user better.\nThese lessons will stay with me all my life.\nBut since last year all our lives changed and our priorities changed as well. And I figured out that joining a place like NUITEQ was more aligned with my future goals.\nNUITEQ builds collaborative softwares that help teachers across UK and US. And also, couple of products that help organizations to collaborate real time efficiently. We have a multi cultural team that spans all over the world. I hope to help the team and the users by making their products better in my time here.\nI can’t be thankful enough to Hasgeek, Kiran and Zainab, and all my co-workers for being amazing managers and human beings, and always backing me up whenever I needed to. I have been successfully spoiled (or maybe enlightened) for having worked in such a great team. I wish Hasgeek and the team all the goodness in the world.\n","date":1626150244,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1626150244,"objectID":"4763cc5d9f3fd69ce236f6b8b1a2333a","permalink":"https://bibhasdn.com/posts/joining-nuiteq/","publishdate":"2021-07-13T04:24:04Z","relpermalink":"/posts/joining-nuiteq/","section":"posts","summary":"insert markdown image Late update. I’ve joined NUITEQ as a Senior Software Engineer at the beginning of this month.\n20th June was my last day of work at Hasgeek. And it was a bit emotional to attend the standup that day.\nI’ve known of and been around Hasgeek since the beginning of my career. A lot of the people I know today so well, I know them through Hasgeek. And similarly, a lot of what I am today is because of the people I met through Hasgeek.\n","tags":["job","career"],"title":"Joining NUITEQ","type":"posts"},{"authors":null,"categories":["coding","system design","interview"],"content":"A friend suggested this book called “Elements of Programming Interviews in Python” to me. Interviews have always been a weak spot for me, and I am not particularly bright when it comes to hardcore coding assignments. So I took this book as an opportunity to improve myself a bit.\nThe book has a section called “Design Problems” where there are few systems that you have to design as an exercise. First of them is a spelling checker. I took it up and read the clues provided by them, and thought, let’s try to build one as an exercise.\nTheir clue/solution explains the typical issues with building a spell checker, and provides few ways to achieve/improve such a system.\nSolution The most basic solution that comes to mind is that have a list of all the words in the given language, and find all the words that have a Levenshtein distance of \u0026lt;= 2 from the given typo. Assuming that the typo is at most 2 characters off from the intended word.\nProblem with the Solution Such a search is expensive to say the least. English language has around ~520,000 words according to Wikipedia. I downloaded a list of about ~370,000 words. Calculating Levenshtein distance with all of them for every single given typo, will not be pleasant.\nOptimizing the solution My first thought was on how I could eliminate the lookup with a list of 370,000 strings.\nIn my experience, typos tend to have same or similar length of the original word. They can be off by 1-2 characters if the person does not know the exact spelling. So, I could improve the number of lookups by pre-calculating the length of all the words in the dictionary, and store them along with the words, and before looking up all the words in the list, I could filter the list by only picking words that are 0-2 characters off in length from the typo words.\nI imported that whole list of ~370,000 words to a postgres table, and calculated and stored their lengths with them. Here is the distribution of lengths in there -\nspellchecker=# select length, count(*) as num from word group by length order by num desc; length | num --------+------- 9 | 53402 8 | 51627 10 | 45872 7 | 41998 11 | 37539 6 | 29874 12 | 29125 13 | 20944 5 | 15918 14 | 14149 15 | 8846 4 | 7186 16 | 5182 17 | 2967 3 | 2130 18 | 1471 19 | 760 2 | 427 20 | 359 21 | 168 22 | 74 23 | 31 24 | 12 25 | 8 27 | 3 28 | 2 29 | 2 31 | 1 (28 rows) So if the typo is 5 character long, now the lookup will be run on about ~43,000 words, which is not great, but definitely an improvement. Now, we need to think about the words we’ll look up against that list.\nAs part of implementing this, I wrote a small function that, given a typo, would change 1-2 characters in it with another character in the alphabet, and generate another typo, or a valid word, which could be the word the user wanted to type. But that list is massive. Looking that up against another massive list is not what we want. So that means that there is some more optimization possible here.\nIt’s indeed possible that someone types pebple when they meant to write people, but the probability of that happening is actually pretty low. Guess why? It’s because of the keyboard we use. While there are of course tons of keyboard layouts, but most people use QWERTY layout, and that’s good enough for my spell checker, because I need to think more about my bigger chunk of users. I could think about all the keyboard layouts out there, but the complication I’ll have to integrate for those fraction of Dvorak or Colemak layout users didn’t make sense for the first version. I’ll get back to them later.\nSo next I wrote a small adjacency matrix of all the characters in a QWERTY keyboard.\nqwerty_adj_graph = { \u0026#34;0\u0026#34;: [\u0026#34;i\u0026#34;, \u0026#34;p\u0026#34;, \u0026#34;o\u0026#34;], \u0026#34;1\u0026#34;: [\u0026#34;q\u0026#34;], \u0026#34;2\u0026#34;: [\u0026#34;w\u0026#34;, \u0026#34;q\u0026#34;], \u0026#34;3\u0026#34;: [\u0026#34;e\u0026#34;, \u0026#34;w\u0026#34;], \u0026#34;4\u0026#34;: [\u0026#34;r\u0026#34;, \u0026#34;e\u0026#34;], \u0026#34;5\u0026#34;: [\u0026#34;t\u0026#34;, \u0026#34;r\u0026#34;], \u0026#34;6\u0026#34;: [\u0026#34;y\u0026#34;, \u0026#34;t\u0026#34;], \u0026#34;7\u0026#34;: [\u0026#34;u\u0026#34;, \u0026#34;y\u0026#34;], \u0026#34;8\u0026#34;: [\u0026#34;i\u0026#34;, \u0026#34;u\u0026#34;], \u0026#34;9\u0026#34;: [\u0026#34;o\u0026#34;, \u0026#34;i\u0026#34;], \u0026#34;a\u0026#34;: [\u0026#34;q\u0026#34;, \u0026#34;w\u0026#34;, \u0026#34;s\u0026#34;, \u0026#34;u\u0026#34;, \u0026#34;z\u0026#34;], \u0026#34;b\u0026#34;: [\u0026#34;v\u0026#34;, \u0026#34;g\u0026#34;, \u0026#34;h\u0026#34;, \u0026#34;n\u0026#34;], \u0026#34;c\u0026#34;: [\u0026#34;x\u0026#34;, \u0026#34;d\u0026#34;, \u0026#34;f\u0026#34;, \u0026#34;v\u0026#34;], \u0026#34;d\u0026#34;: [\u0026#34;s\u0026#34;, \u0026#34;e\u0026#34;, \u0026#34;r\u0026#34;, \u0026#34;f\u0026#34;, \u0026#34;c\u0026#34;, \u0026#34;x\u0026#34;], \u0026#34;e\u0026#34;: [\u0026#34;w\u0026#34;, \u0026#34;r\u0026#34;, \u0026#34;d\u0026#34;, \u0026#34;s\u0026#34;, \u0026#34;i\u0026#34;], \u0026#34;f\u0026#34;: [\u0026#34;d\u0026#34;, \u0026#34;r\u0026#34;, \u0026#34;t\u0026#34;, \u0026#34;g\u0026#34;, \u0026#34;v\u0026#34;, \u0026#34;c\u0026#34;], \u0026#34;g\u0026#34;: [\u0026#34;f\u0026#34;, \u0026#34;t\u0026#34;, \u0026#34;y\u0026#34;, \u0026#34;h\u0026#34;, \u0026#34;b\u0026#34;, \u0026#34;v\u0026#34;], \u0026#34;h\u0026#34;: [\u0026#34;g\u0026#34;, \u0026#34;y\u0026#34;, \u0026#34;u\u0026#34;, \u0026#34;j\u0026#34;, \u0026#34;n\u0026#34;, \u0026#34;b\u0026#34;], \u0026#34;i\u0026#34;: [\u0026#34;u\u0026#34;, \u0026#34;e\u0026#34;, \u0026#34;o\u0026#34;, \u0026#34;k\u0026#34;, \u0026#34;j\u0026#34;, \u0026#34;y\u0026#34;], \u0026#34;j\u0026#34;: [\u0026#34;h\u0026#34;, \u0026#34;u\u0026#34;, \u0026#34;i\u0026#34;, \u0026#34;k\u0026#34;, \u0026#34;m\u0026#34;, \u0026#34;n\u0026#34;], \u0026#34;k\u0026#34;: [\u0026#34;j\u0026#34;, \u0026#34;i\u0026#34;, \u0026#34;o\u0026#34;, \u0026#34;l\u0026#34;, \u0026#34;m\u0026#34;], \u0026#34;l\u0026#34;: [\u0026#34;k\u0026#34;, \u0026#34;o\u0026#34;, \u0026#34;p\u0026#34;], \u0026#34;m\u0026#34;: [\u0026#34;n\u0026#34;, \u0026#34;j\u0026#34;, \u0026#34;k\u0026#34;], \u0026#34;n\u0026#34;: [\u0026#34;b\u0026#34;, \u0026#34;h\u0026#34;, \u0026#34;j\u0026#34;, \u0026#34;m\u0026#34;], \u0026#34;o\u0026#34;: [\u0026#34;i\u0026#34;, \u0026#34;p\u0026#34;, \u0026#34;l\u0026#34;, \u0026#34;k\u0026#34;], \u0026#34;p\u0026#34;: [\u0026#34;o\u0026#34;, \u0026#34;l\u0026#34;], \u0026#34;q\u0026#34;: [\u0026#34;w\u0026#34;, \u0026#34;a\u0026#34;], \u0026#34;r\u0026#34;: [\u0026#34;e\u0026#34;, \u0026#34;t\u0026#34;, \u0026#34;f\u0026#34;, \u0026#34;d\u0026#34;], \u0026#34;s\u0026#34;: [\u0026#34;a\u0026#34;, \u0026#34;w\u0026#34;, \u0026#34;e\u0026#34;, \u0026#34;d\u0026#34;, \u0026#34;x\u0026#34;, \u0026#34;z\u0026#34;], \u0026#34;t\u0026#34;: [\u0026#34;r\u0026#34;, \u0026#34;y\u0026#34;, \u0026#34;g\u0026#34;, \u0026#34;f\u0026#34;], \u0026#34;u\u0026#34;: [\u0026#34;y\u0026#34;, \u0026#34;i\u0026#34;, \u0026#34;j\u0026#34;, \u0026#34;h\u0026#34;], \u0026#34;v\u0026#34;: [\u0026#34;c\u0026#34;, \u0026#34;f\u0026#34;, \u0026#34;g\u0026#34;, \u0026#34;b\u0026#34;], \u0026#34;w\u0026#34;: [\u0026#34;q\u0026#34;, \u0026#34;e\u0026#34;, \u0026#34;s\u0026#34;, \u0026#34;a\u0026#34;], \u0026#34;x\u0026#34;: [\u0026#34;z\u0026#34;, \u0026#34;s\u0026#34;, \u0026#34;d\u0026#34;, \u0026#34;c\u0026#34;], \u0026#34;y\u0026#34;: [\u0026#34;t\u0026#34;, \u0026#34;u\u0026#34;, \u0026#34;h\u0026#34;, \u0026#34;g\u0026#34;, \u0026#34;i\u0026#34;], \u0026#34;z\u0026#34;: [\u0026#34;a\u0026#34;, \u0026#34;s\u0026#34;, \u0026#34;x\u0026#34;], } I am only checking for alpha-numeric characters in the typo and replacing them with only letters. I could also add checks for special characters, I chose not to for this version. This could be improved.\nSo now, when I generate possible words by exchanging letters in a typo, I don’t replace all letters in the typo, with all the letters in the alphabet. I just pick the letters that are closer to …","date":1617758022,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1617758022,"objectID":"215f17d74f5c7a4035cecd03d315b36c","permalink":"https://bibhasdn.com/posts/build-a-spelling-checker/","publishdate":"2021-04-07T01:13:42Z","relpermalink":"/posts/build-a-spelling-checker/","section":"posts","summary":"A friend suggested this book called “Elements of Programming Interviews in Python” to me. Interviews have always been a weak spot for me, and I am not particularly bright when it comes to hardcore coding assignments. So I took this book as an opportunity to improve myself a bit.\nThe book has a section called “Design Problems” where there are few systems that you have to design as an exercise. First of them is a spelling checker. I took it up and read the clues provided by them, and thought, let’s try to build one as an exercise.\n","tags":["coding","system-design","interview"],"title":"Build a Spelling Checker","type":"posts"},{"authors":null,"categories":[],"content":"The Promise - Couple of weeks back I woke up to this prompt by WhatsApp first thing in the morning -\nNot my screenshot. I forgot to take one. This is off the internet, from an iOS device.\nTL;DR - WhatsApp is updating their privacy policy, and they’re going to start sharing even more data with Facebook, it’s parent company, and if I don’t agree to it by February 8th, WhatsApp will delete my account.\nRight off the bat this felt like beginning of a bad move by WhatsApp. The moment you start holding your users hostage to a clause, and threaten to kick them out, that almost certainly means that something is wrong. This quote is from the explainer posted by Internet Freedom Foundation -\nRecently, WhatsApp released an in-app notification forcing users to accept its revised privacy policy by 08 February 2021 or stop using its service entirely. The new privacy policy confirms that Facebook may now have access to messages shared with businesses on WhatsApp and it provides more insight into expansive meta data collection by WhatsApp. The latest changes to WhatsApp’s privacy policy cement the problematic status quo which has existed since the privacy policy was first updated in 2016.\nWhat IFF is mentioning there is the statement by WhatsApp when they were acquired by Facebook in 2014. This is what they said back then -\nIf partnering with Facebook meant that we had to change our values, we wouldn’t have done it. Instead, we are forming a partnership that would allow us to continue operating independently and autonomously. Our fundamental values and beliefs will not change. Our principles will not change. Everything that has made WhatsApp the leader in personal messaging will still be in place. Speculation to the contrary isn’t just baseless and unfounded, it’s irresponsible. It has the effect of scaring people into thinking we’re suddenly collecting all kinds of new data. That’s just not true, and it’s important to us that you know that.\nThe prompt billions of WhatsApp users received on that morning goes against everything that was promised. So this set off an alarm.\nThe burning matchstick - People started to talk more about this. A lot of people accepted this prompt without reading because we’re not used to reading terms and conditions. But then later they realised what just happened, and they also got angry. The last straw was this tweet -\nElon Musk asks his followers to use Signal\nThus began the great WhatsApp exodus.\nPrivacy and Facebook - People who’ve never heard of Signal, started joining it. My contacts who are usually the farthest from what you’d call a “Techie”, started joining Signal. All in the search for “privacy”. This set off a series of conversations in many groups I’m in because most of the people I talk to are techies, and we’ve been Signal users for years. We’ve never been able to use it as a regular messaging app because none of our other contacts were using it. But we still had it with us all the time, just in case we needed to have a private chat.\nWhat’s interesting about this mass immigration to Signal is that people are talking more and more about what “privacy” means on the Internet. So what if we leave WhatsApp, when we join Signal/Telegram they’ll have our data, right? What’s so different about it? How does it even matter? Some people started saying that if you move from WhatsApp and still use Instagram, that’s just plain hypocrisy. Because of course Instagram is also owned by Facebook. And it’s arguably more data hungry.\nI had these conversations many a time with many people over the years. So I thought I’ll just write about how I see it, what “privacy” means to me, what “privacy” looks like on the Internet, and how I try to protect my privacy on the Internet.\nBefore I get to what “privacy” means to me, I want to talk a bit about “Facebook”. First of all, if you didn’t know, Facebook is primarily an advertising company. The only way Facebook makes money is by selling you ads. That’s it. At this point, I’d request you to go through this Twitter thread that talks a bit about what Facebook is -\nStephen, why are you so critical of Facebook and not the other big tech companies?\nA 🧵 for well-intentioned engineers about how to navigate the complexities of big tech.\n— Stephen Diehl (@smdiehl) January 3, 2021 This is the relevant part about Facebook -\nFacebook\nAnd that’s about it. No, Facebook is not just a website to post about your day, your trips, your food etc. To you, you may use it just for that, but what Facebook does, is to take everything you post, and turn them into data that can be used to show more ads to you or somebody else. Every single thing you post, is linked to you, people of your gender, age group, ethnicity, country, etc etc and then more relevant ads are served to them. That’s entirely what Facebook does to make money. And that’s also how Facebook, Instagram and WhatsApp are free.\nFacebook is not just another company. The company literally has no moral compass. It’ll do anything …","date":1610459723,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1610459723,"objectID":"d38e5feb2ab298f23eed625afca7def0","permalink":"https://bibhasdn.com/posts/privacy-focused-messaging-on-the-internet/","publishdate":"2021-01-12T13:55:23Z","relpermalink":"/posts/privacy-focused-messaging-on-the-internet/","section":"posts","summary":"The Promise - Couple of weeks back I woke up to this prompt by WhatsApp first thing in the morning -\nNot my screenshot. I forgot to take one. This is off the internet, from an iOS device.\nTL;DR - WhatsApp is updating their privacy policy, and they’re going to start sharing even more data with Facebook, it’s parent company, and if I don’t agree to it by February 8th, WhatsApp will delete my account.\n","tags":["privacy"],"title":"Privacy on the Internet","type":"posts"},{"authors":null,"categories":[],"content":"We traveled to Kolkata in December 2020 to be around our families. And since arriving, don’t know how a whole month got spent. Then finally got a chance to explore the city, and with a couple of friends who haven’t explored the city much. So that got me even more excited.\nOn the first round, we visited and walked around Vidyasagar Setu, Princep Ghat, Babu Ghat and then stopped at Esplanade for breakfast with Hing-er Kochuri, with Alu tarkari and pickled green chili.\nNext we walked to Park St Cemetery, spent an hour there. And ended the day trip with lunch at Arsalan, Park St.\nThe day was almost enough to get my heart filled with a lot of what I was missing about the city.\nI clicked some photos. Sharing them here.\nLet me know if you like the photos. I plan on exploring this city a lot while I’m here. Been almost 5 years since I last had so much time to spend here. I’m going to utilize it fully.\n","date":1609768456,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1609768456,"objectID":"e1fb4bd57f6e82202a2233967180d95f","permalink":"https://bibhasdn.com/posts/starting-2021-walking-around-kolkata/","publishdate":"2021-01-04T13:54:16Z","relpermalink":"/posts/starting-2021-walking-around-kolkata/","section":"posts","summary":"We traveled to Kolkata in December 2020 to be around our families. And since arriving, don’t know how a whole month got spent. Then finally got a chance to explore the city, and with a couple of friends who haven’t explored the city much. So that got me even more excited.\nOn the first round, we visited and walked around Vidyasagar Setu, Princep Ghat, Babu Ghat and then stopped at Esplanade for breakfast with Hing-er Kochuri, with Alu tarkari and pickled green chili.\n","tags":["kolkata"],"title":"Starting 2021 - Walking around Kolkata","type":"posts"},{"authors":null,"categories":["covid19"],"content":"December is here. 2020 has been a wild ride and looks like it’ll overflow into most of 2021 as well. This year, if nothing else, has been an eye-opener on what the most important things in our lives are.\nAs we live in the constant fear of death, we can’t help but cherish those who give us happiness and appreciate the people around us for what they are. Even though mortality rates are pretty low, the uncertainty of all of it is what affects us most. We’re all doing what we can to stay safe, but nothing is still certain. It’s a cat and mouse game where we are the mouse, and the cats are invisible.\nThen the realization comes that maybe this is how it has always been, and the pandemic is just pointing a finger at it. Life around us has always been this uncertain. We are trying to convince ourselves that we have been in control of our lives before COVID, but maybe we were not. Now that there is a pandemic upon us, we realize that we have taken everyone and everything around us for granted, expecting them to last for a certain period of time. And yet they didn’t. But now, the fear is on us because of the amount of grief and anxiety we’re already feeling from everything that’s happening around us.\nWhile we constantly try to stay in control, we realize how fragile and temporary everything around us is. Maybe we need to appreciate everything regardless of a pandemic looming over. If you like someone, go tell them. If you appreciate someone, go tell them. They’re just as much confused, stressed and feeling hopeless as you are. Maybe make their day a little better. And maybe their happiness will bring you some relief. And they’re around today. We don’t know the future.\nBecause my circles are mostly techies, during the first quarter of the pandemic, there were a lot of tech discussion to help everyone stay busy/distracted/relevant. But as we crossed the 6 months boundary, seems like that died down. And more human discussions started taking place. I myself have become exhausted of constant tech talks around. At this point, I just want to throw everything away and cook good food every day and feed the people who care about me.\nI miss traveling.\nGoing to visit families soon as they’ve been extremely stressed mentally. We’ve done all that can be done from far away. Travel has its risks, but if I can help their anxiety even a little at this point, it’ll be worth it, given their advanced age. Tomorrow is uncertain, but I can do something about it today.\nWhenever I get stuck at a decision about whether to do something or not, I always judge them by how much happiness that will bring me, or to the people I love, or to the people who love me. At any cost. After all, what’s the point of living, if we’re not happy? Why wait for tomorrow to be happy?\nThis pandemic has really put my decision-making process to test. What brings happiness is to stay closer to those who love you, but traveling to them is also the last thing you should do because you could be a carrier. In the end safety won over. I didn’t travel home when people around me were. And it’s been almost 9 months since. In these 9 months we’ve done everything possible to help our families stay sane and happy. I’m pretty sure the anxiety has been more difficult for them than us. The least we can do is to try to keep them occupied and happy for an hour a day.\nKeeping the constant fear of losing people aside, what has kept me mostly sane during this year, is playing games with friends and talking to them, and cooking good food at home.\nDunno if we’ll ever get a year like this where everyone is at home, and not exhausted from commuting all day, or looking at their manager’s face all day. Even though forced WFH has had adverse effects on people who are not suited for it, now that they’ve spent almost a year in this lifestyle, working in their PJs, I don’t think they can go back to their pre-pandemic work clothes anytime soon. But thanks to that, got more time to play with people.\nSpecial thanks to you, Sathya.\nWhen it comes to cooking at home, we’ve always cooked a lot, but this pandemic has forced us to increase that even more. For the first 6 months of it, we didn’t have outside food even once. That means a lot of cooking at home. And making food is always delightful to me. Plus having a partner who loves it as much as I do, if not more, helps. But that shouldn’t stop anyone from cooking IMO. Being able to cook food is a gift, that lets you fill your, and if you’re lucky, other’s stomach as well. As we live and breath, there is no greater deed than that. Food brings people closer, we need that now more than ever.\nThankful to all of you for keeping me sane.\nAvoid the crowd, wear a mask, stay safe.\n","date":1606870598,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1606870598,"objectID":"c06ebb0c746ae5eac7d9db049866aafa","permalink":"https://bibhasdn.com/posts/covid-19-end-of-year-update/","publishdate":"2020-12-02T00:56:38Z","relpermalink":"/posts/covid-19-end-of-year-update/","section":"posts","summary":"December is here. 2020 has been a wild ride and looks like it’ll overflow into most of 2021 as well. This year, if nothing else, has been an eye-opener on what the most important things in our lives are.\nAs we live in the constant fear of death, we can’t help but cherish those who give us happiness and appreciate the people around us for what they are. Even though mortality rates are pretty low, the uncertainty of all of it is what affects us most. We’re all doing what we can to stay safe, but nothing is still certain. It’s a cat and mouse game where we are the mouse, and the cats are invisible.\n","tags":["covid19"],"title":"COVID-19: End of year update","type":"posts"},{"authors":null,"categories":[],"content":"I was going through the top 250 movies on IMDB and had a sudden craving to know whether movies from any certain period got better rating or not. So I got to work with the list. I wanted to make some interactive charts, and after trying few things, found plotly to be exactly what I needed. You can use pandas dataframe with it and can even export the interactive chart as HTML to be hosted somewhere. This works.\nFirst I needed to scrape the latest top 250 list. I downloaded the raw IMDB dataset in the hope that I can extract it from there. But turns out the way they calculate the top 250 is not very straightforward. Although it looks interesting, I didn’t want to get into the math this weekend. So found some old code on github to scrape IMDB, and thankfully it worked nicely. Looks like IMDB doesn’t care enough to make it difficult to scrape them.\nOnce I got the data, I tried making some charts. This is just for fun and see if something stands out. Thanks for the poke, Rasagy.\n(note: most movies have multiple genres. I picked the first one as otherwise the combination of them become a huge list to have any meaningful comparison.)\n(note: the charts are best viewed from a desktop browser as they are interactive.)\nYear of release vs rating It seems from a glance that 90s had more movies rated \u0026gt; 8.4. I also put in the genre in the mix. So play around and see what you can figure from this.\nYear of release vs country USA is obviously the one with most entries. But we can see some outliers. Few movies from France and Germany from as early as 1927 got in the list.\nGenre vs number of ratings Crime, Thriller and Comedy movies get the most votes.\nRating vs number of ratings Seems like it’s easier to get into 8-8.5 range with not as many votes. We see some outliers here as well. Notably “12 Angry Men” that got into the 9 category with only around 677k ratings. Followed by “The Good, the Bad and the Ugly” that got into the 8.8 club with around 679k ratings. At the other end, there is “Inception” that got 8.8 even after getting \u0026gt;2M votes.\nI’ll add more stuff if I come up with them. Do you have any other ideas of what can be done with this? Tweet me!\n","date":1605487600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1605487600,"objectID":"5335e30b46aec4039c16735d1cc42aa6","permalink":"https://bibhasdn.com/posts/some-fun-with-imdb-data-and-plotly/","publishdate":"2020-11-16T00:46:40Z","relpermalink":"/posts/some-fun-with-imdb-data-and-plotly/","section":"posts","summary":"I was going through the top 250 movies on IMDB and had a sudden craving to know whether movies from any certain period got better rating or not. So I got to work with the list. I wanted to make some interactive charts, and after trying few things, found plotly to be exactly what I needed. You can use pandas dataframe with it and can even export the interactive chart as HTML to be hosted somewhere. This works.\n","tags":["imdb"],"title":"Some fun with IMDB data and plotly","type":"posts"},{"authors":null,"categories":["dns","hasgeek","hasjob","flask"],"content":"As part of my work at Hasgeek, I also work on and maintain Hasjob, a job board for startups. To monitor any downtime, we use Uptime Robot. For last few days, uptime robot has been sending out alerts now and then that Hasjob was going down 10-15 minutes as a time. But when I visited the home page, it was working, even when uptime robot was reporting it to be down. So I thought it might be some issue that’s affecting some requests and not the others. I looked into the logs but couldn’t find anything meaningful. Except one expensive query that we run, which is supposed to be async. We pushed a fix for it yesterday morning, which was supposed to make things better. But suddenly we started getting complaints that the job posts were not loading at all. I go and check. The home page was loading but none of the job posts were. It was 9:43PM on a Friday night, but we had to fix it. So I started digging in.\nFirst observation from uwsgi log was that every request to a jobpost page was taking 30+ seconds to load. Every single one of them. Some were taking 60-90 seconds. So we now know that Nginx is giving up on waiting for uwsgi requests because uwsgi is taking too much time to respond.\nMy first hunch was the expensive query. We recently upgrade to Postgres 12. I saw that logging wasn’t turned on, so I turned it on for expensive queries. It was logging the expensive queries, but after some observation, found no correlation between them and the HTTP requests. There were more requests that were timing out, than expensive queries. So that’s out the window.\nSo it’s most likely the application taking time to respond. But we didn’t make any changes to the application recently that could affect application response time this much. Something else must suddenly be taking too much time. That’s where I decided to profile the requests. We don’t use Newrelic or any other service that runs a profiler on each request. That’s something we are going to do after last night I think.\nAnyway, Hasjob is a flask application that runs on uwsgi. So I look into how to put a profiler in between. Went through a bunch of Python profiler packages and none of them seem to fit in my use case. I needed something simple and plug-and-play to run the profiler on a production application. After some scrambling I stumbled upon werkzeug’s ProfilerMiddleware. We already use werkzeug because of Flask, so this seemed perfect.\nOur wsgi file looked like this -\n# -*- coding: utf-8 -*- import os.path import sys from hasjob import app as application __all__ = [\u0026#39;application\u0026#39;] sys.path.insert(0, os.path.dirname(__file__)) Now I updated to this -\n# -*- coding: utf-8 -*- import os.path import sys from werkzeug.middleware.profiler import ProfilerMiddleware from hasjob import app as application application.config[\u0026#39;PROFILE\u0026#39;] = True application.wsgi_app = ProfilerMiddleware( application.wsgi_app, restrictions=[5], profile_dir=\u0026#39;/path/to/profiler/directory\u0026#39; ) __all__ = [\u0026#39;application\u0026#39;] sys.path.insert(0, os.path.dirname(__file__)) restrictions says that show only top 5 issues, and profile_dir says to log all the profiles in the provided directory. I didn’t turn off stream output so at the same time the profiler was spitting out the outputs in uwsgi log.\nAnd with much amaze I see that all the requests were going through 19-38 time.sleep calls that were delaying them. Which was confusing as hell. So something was definitely blocking the application. My guess once again was an expensive query. Now to look into what exactly was blocking the application.\nThe most popular solution to analyse the profile files I came across was to use gprof2dot to turn the profile files into dot files. And then use graphviz to turn that dot file into a graphical representation of all the method calls. They look something like this.\nSo I install gprof2dot convert one profile file and transfer it to my laptop. I didn’t know how much time or processing power it’ll require. I install graphviz on my laptop and start processing the dot file at around 12AM. By the time you reach the end of the blog post, it was 1:30AM and that file was still processing. I gave up around 12:20 AM. It was Friday night and every minute some user was getting timed out.\nI started looking into how else to analyse it. And came across pstats. Let’s give this a try.\nimport pstats stats = pstats.Stats(\u0026#39;directory/GET.foobar.000255ms.1392663371.prof\u0026#39;) stats.sort_stats(\u0026#39;time\u0026#39;, \u0026#39;calls\u0026#39;) stats.print_callers(\u0026#39;time.sleep\u0026#39;) Just to find that the caller of time.sleep is -\n\u0026lt;path_to_venv\u0026gt;/lib/python3.7/site-packages/eventlet/hubs/poll.py:71(wait) I’m like, “Ok..”, but why? So I check the caller of above, just to find this -\n\u0026lt;path_to_venv\u0026gt;/lib/python3.7/site-packages/dns/resolver.py:972(resolve) And I’m like, “Ehhh….!!” This is what was left?\nI boot up a Python shell and try this -\n\u0026gt;\u0026gt;\u0026gt; import dns.resolver \u0026gt;\u0026gt;\u0026gt; resolver = dns.resolver.Resolver() \u0026gt;\u0026gt;\u0026gt; resolver.timeout = 30 \u0026gt;\u0026gt;\u0026gt; resolver.lifetime = 30 \u0026gt;\u0026gt;\u0026gt; resolver.query(\u0026#39;bibhasdn.com\u0026#39;, \u0026#39;MX\u0026#39;) …","date":1597482608,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1597482608,"objectID":"c36a782553e52382048e02f8e0a2cbab","permalink":"https://bibhasdn.com/posts/its-always-dns-episode-3416/","publishdate":"2020-08-15T09:10:08Z","relpermalink":"/posts/its-always-dns-episode-3416/","section":"posts","summary":"\"It's always DNS. When it's not, it's config change\" - Swanand","tags":["dns","hasgeek","hasjob","flask"],"title":"It's always DNS: Episode #3416","type":"posts"},{"authors":null,"categories":["raspberry","pi"],"content":"This involves 2 pieces of h/w.\nA Raspberry Pi 1 B+ A RedBear IoT pHAT. (Kickstarter) The HAT is primarily for a Pi Zero, but it works with any Raspberry Pi with 40 GPIO pins, hence my Pi 1 B+ qualifies.\nI’ve had this Pi for years now and it was gathering dust. So recently decided to pick it up and do something with it. First I set up a Pi-hole instance on it and then a Telegraf+Influxdb+Grafana instance to monitor my home Internet connection. Then found that I also had a BBC Micro:bit lying around and it comes with a bunch of sensors built in. So thought if I could connect the Micro:bit with the RPi, then I could use the sensors to monitor my home temperature real time for example. The other option is to get a temperature sensor for the Pi. But let’s call that plan B.\nBut the Micro:bit doesn’t come with any GPIO interface. The connectors are weird. I need to buy a separate breakout shield and then get a breadboard to connect to it. I thought why not use the BLE on board of Micro:bit to connect to it. And I happened to have a RedBear IoT pHAT lying around as well which I could connect to the RPi1 and make it Bluetooth enabled.\nSo, I connected it. Wi-Fi worked fine. But Bluetooth showed no sign of working. RPi couldn’t initialize the Bluetooth controller.\npi@raspberrypi:~ $ sudo systemctl status hciuart.service ● hciuart.service - Configure Bluetooth Modems connected by UART Loaded: loaded (/lib/systemd/system/hciuart.service; enabled; vendor preset: enabled) Active: inactive (dead) Jul 13 11:56:50 raspberrypi systemd[1]: Dependency failed for Configure Bluetooth Modems connected by UART. Jul 13 11:56:50 raspberrypi systemd[1]: hciuart.service: Job hciuart.service/start failed with result \u0026#39;dependency\u0026#39;. So this followed hours of digging. From updating the Linux kernel to updating all the Bluetooth related packages. Nothing worked. Because I assumed that the pHAT h/w was fine and it’ll just work. When no software changes worked, I started looking at the h/w. Went through the older issues of the pHAT repo, just to find this 4 year old issue.\nBluetooth not working · Issue #2 · redbear/IoT_pHAT Sometimes, the Bluetooth fails to load when booting up. The current method to resolve: https://github.com/redbear/IoT_pHAT/tree/master/eeprom/experimental But still need to add init_uart_clock=4800... redbear GitHub Apparently I could update the EEPROM firmware of the pHAT. Worth a shot. Instructions are here. Essentially,\ngit clone https://github.com/redbear/IoT_pHAT.git cd Iot_pHAT/eeprom/bin sudo ./eepflash.sh -f=IoT_pHAT-with-dt.eep -t=24c32 -w After that I reboot the Pi once and viola. The bluetoothctl can now find the controller and I can scan for devices. 😊\npi@raspberrypi:~ $ sudo bluetoothctl [NEW] Controller B8:27:EB:5C:DA:1D raspberrypi [default] [bluetooth]# show Controller XX:27:EB:XX:DA:XX Name: raspberrypi Alias: raspberrypi Class: 0x000000 Powered: yes Discoverable: no Pairable: yes UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb) UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb) UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb) UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb) UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb) Modalias: usb:v1D6Bp0246d052B Discovering: no I still cannot connect to the Micro:bit to read the sensors though. But that seems like some other issue with the bluezero library. I’ll go figure that out. Putting this post out here because I couldn’t find much help on the Internet regarding this issue. So maybe this will help you.\nHave a good day.\n","date":1594615457,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1594615457,"objectID":"5158d9e4ceecd4e8d9af01085084ce8e","permalink":"https://bibhasdn.com/posts/using-a-redbear-iot-phat-for-ble-with-raspberry-pi-1-b/","publishdate":"2020-07-13T04:44:17Z","relpermalink":"/posts/using-a-redbear-iot-phat-for-ble-with-raspberry-pi-1-b/","section":"posts","summary":"This involves 2 pieces of h/w.\nA Raspberry Pi 1 B+ A RedBear IoT pHAT. (Kickstarter) The HAT is primarily for a Pi Zero, but it works with any Raspberry Pi with 40 GPIO pins, hence my Pi 1 B+ qualifies.\nI’ve had this Pi for years now and it was gathering dust. So recently decided to pick it up and do something with it. First I set up a Pi-hole instance on it and then a Telegraf+Influxdb+Grafana instance to monitor my home Internet connection. Then found that I also had a BBC Micro:bit lying around and it comes with a bunch of sensors built in. So thought if I could connect the Micro:bit with the RPi, then I could use the sensors to monitor my home temperature real time for example. The other option is to get a temperature sensor for the Pi. But let’s call that plan B.\n","tags":["raspberry","pi"],"title":"Using a RedBear IoT pHAT for BLE with Raspberry Pi 1 B+","type":"posts"},{"authors":null,"categories":["covid19","coronavirus","life"],"content":"One month ago when I was busy setting up this blog, COVID-19 was alive and well and growing in China. At that point I didn’t even dream of what is happening today. Bangalore and Karnataka are essentially shut down for next 1-2 weeks. Couple of weeks back when things were a little less bleak, mom and dad were calling me and asking us to head for Kolkata. But there was an instance where the airport authorities were unable to detect a positive case that slipped past them and then got detected few days later. (We still don’t know how many he infected in between) So I stopped trusting airport authorities by then and decided to not travel. Also given the fact that my parents are around or above 60 years of age. I didn’t want to put them in danger. Better me than them. I can probably survive this if I get it.\nI’ve been working from home close to 7 years now. So the social distancing part wasn’t that hard for me. My wife on the other hand works in a pre-school, which involves being around waayyy too many people and kids. The management tried their best to keep the school open as long as possible, but the annoucement by govt on Friday (the 13th) forced them to close it down.\n‌ ‌\nBut I don’t see an end to this lockdown. Number of positive cases in India is pretty low right now, mostly because we’re not mass testing. But I expect the number to go up rapidly. There is a new news articles everyday telling about people who fled from quarantine and then the result came back positive. These aren’t really helping.\nI’m sort of in a constant state of panic regarding my parents and in-laws, as they are all near or above 60. If it does get bad in India, then the only thing we can do is pray, which in short equals to nothing. We’ve asked them not to get out of house. That’s the only thing we can do at this point. And video calling them and trying to keep them assured that we’re fine. They are probably the ones panicking more right now as we are away from home and in a city that’s completely locked down.\nI think, for a young person with parents, that’s the worst part of this COVID-19 breakout. It seems like it’s out to get rid of a major portion of the old people. Even if we get it, we’ll probably survive. I dont have a major lung disease, or any kind of disease as far as I know. Wife’s immunity is not that great but she’s young, she’ll probably come through. But our parents almost have no hope.\nI’m reading about what’s happening in Italy and imagining that the same could happen to us next. China pushed through with their tenacity and obsessive testing of everyone in the country. In India, that seems like a distant dream.\n‌ ‌\nThe best defence we have right now is social distancing and I’m still hearing about people attending weddings with 100s of people. Karnataka govt shut down all the marraige halls this week. But BBMP (Bangalore Municipality) commissioner sent a tweet yesterday saying that nobody can stop a wedding if there are not more than 100-150 people there as it’s a “part of our cultural heritage” (I’m not kidding).\n‌ ‌\nIndia is a different level of ball game from any other country in the world, except maybe China. The population is overwhelming. One positive case in a railway station during peak hour is enough to cause a chain reaction that causes a meltdown. It’s a ticking timebomb. We’re just waiting for it to explode. The number of confirmed cases rose by 15 since yesterday. We just crossed into 3 digits.\nIt’s really quiet right now. And the clock is ticking.\nIf anything can get us out of this, it’s probably science. Ways to detect positive cases faster and with more frequency. A vaccine won’t be that bad but even with current state of science it’ll probably take months for one to come out because of the lengthy testing process. Etc.\nCOVID-19 pandemic is being compared with the 1918/19 influenza pandemic and we’re expecting to see a death toll of similar magnitude, if not more. But what changed since 1918 is our progress in science. This will probably be the real test of science in our lifetime. Hopefully this will also be able to prove the futility of all the pseudo-science out there, but I might be hoping too nuch. We already have way too many unknowns regarding this. We don’t know almost anything.\nIf you came to read this post with some hope, I’ve probably already diminished it. Sorry about that. But do know that you’re not alone. Next 6 months or so looks bleak at best. We have to endure what’s coming. Sit tight and don’t go anywhere. And wash your hands. All we have left is hope.\n","date":1584260986,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1584260986,"objectID":"7a52a572c1be68a3cfe26a61e24c2497","permalink":"https://bibhasdn.com/posts/covid-19-and-our-lives/","publishdate":"2020-03-15T08:29:46Z","relpermalink":"/posts/covid-19-and-our-lives/","section":"posts","summary":"COVID-19 is inching closer every day. And we're all sitting ducks.","tags":["covid19","coronavirus","life"],"title":"COVID-19 and our lives","type":"posts"},{"authors":null,"categories":[],"content":"Almost every year I start by thinking I’ll write more. This year is no difference. This blog was built with the hope that it makes the writing experience better and easier. As much as I like Jekyll, writing blog posts in markdown is a horrible experience. It just adds up to the mental block about writing something.\nSetting up a new blog which is not powered by a static site generator is another problem, because it required the time and energy to set things up. But this time, I thought I’ll do it and pick up some skills along the way. I always learn better when I build something. So this eas na experiment with Teraform and Ansible.\nHope this helps me write more. Given that 10% of this year is already over, I better get started. See you in next post. 👋\n","date":1581089965,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1581089965,"objectID":"4e190f3beb359222a9c43eeaf80027fe","permalink":"https://bibhasdn.com/posts/new-blog-built-by-terraform-and-ansible/","publishdate":"2020-02-07T15:39:25Z","relpermalink":"/posts/new-blog-built-by-terraform-and-ansible/","section":"posts","summary":"Almost every year I start by thinking I’ll write more. This year is no difference. This blog was built with the hope that it makes the writing experience better and easier. As much as I like Jekyll, writing blog posts in markdown is a horrible experience. It just adds up to the mental block about writing something.\nSetting up a new blog which is not powered by a static site generator is another problem, because it required the time and energy to set things up. But this time, I thought I’ll do it and pick up some skills along the way. I always learn better when I build something. So this eas na experiment with Teraform and Ansible.\n","tags":["terraform","ansible"],"title":"New blog, powered by Ghost, built by Terraform and Ansible","type":"posts"},{"authors":null,"categories":null,"content":"I recently bought a new (used) laptop, a Lenovo Thinkpad T430, and decided to install Linux Mint with KDE on it. I used to use Cinnamon but decided to give KDE a chance because I’ve used KDE apps before and they’re the finest.\nIt’s been running fine since then except, I’ve had this problem where once in a month or so, when I close the lid, the laptop sleeps for a second and then wakes up instantly. First I thought it was a kernel issue, so I updated the kernel and that fixed that somehow. So I kept using it but then again in about a month it happened again. I updated the kernel again, it went away. Then today morning it happened again. By now I’m pretty sure that it’s not a kernel issue. Something is stopping the system from falling into sleep. So I looked in to syslog and looked for logs around the time the wake up happened to see if there is any error logged there. I didn’t find any error and the log looked like this -\nJan 9 11:51:08 Shire kernel: [560144.645150] ACPI: Preparing to enter system sleep state S3 Jan 9 11:51:08 Shire kernel: [560144.824181] ACPI : EC: EC stopped Jan 9 11:51:08 Shire kernel: [560144.824183] PM: Saving platform NVS memory Jan 9 11:51:08 Shire kernel: [560144.824194] Disabling non-boot CPUs ... Jan 9 11:51:08 Shire kernel: [560144.824862] Broke affinity for irq 16 Jan 9 11:51:08 Shire kernel: [560144.824871] Broke affinity for irq 23 Jan 9 11:51:08 Shire kernel: [560144.824881] Broke affinity for irq 26 Jan 9 11:51:08 Shire kernel: [560144.825974] smpboot: CPU 1 is now offline Jan 9 11:51:08 Shire kernel: [560144.837787] Broke affinity for irq 16 Jan 9 11:51:08 Shire kernel: [560144.837794] Broke affinity for irq 23 Jan 9 11:51:08 Shire kernel: [560144.837801] Broke affinity for irq 26 Jan 9 11:51:08 Shire kernel: [560144.837817] Broke affinity for irq 31 Jan 9 11:51:08 Shire kernel: [560144.838868] smpboot: CPU 2 is now offline Jan 9 11:51:08 Shire kernel: [560144.853590] Broke affinity for irq 1 Jan 9 11:51:08 Shire kernel: [560144.853595] Broke affinity for irq 8 Jan 9 11:51:08 Shire kernel: [560144.853599] Broke affinity for irq 9 Jan 9 11:51:08 Shire kernel: [560144.853604] Broke affinity for irq 12 Jan 9 11:51:08 Shire kernel: [560144.853609] Broke affinity for irq 16 Jan 9 11:51:08 Shire kernel: [560144.853614] Broke affinity for irq 23 Jan 9 11:51:08 Shire kernel: [560144.853619] Broke affinity for irq 26 Jan 9 11:51:08 Shire kernel: [560144.853623] Broke affinity for irq 28 Jan 9 11:51:08 Shire kernel: [560144.853628] Broke affinity for irq 29 Jan 9 11:51:08 Shire kernel: [560144.853633] Broke affinity for irq 31 Jan 9 11:51:08 Shire kernel: [560144.854673] smpboot: CPU 3 is now offline Jan 9 11:51:08 Shire kernel: [560144.866355] ACPI: Low-level resume complete Jan 9 11:51:08 Shire kernel: [560144.866394] ACPI : EC: EC started Jan 9 11:51:08 Shire kernel: [560144.866395] PM: Restoring platform NVS memory Jan 9 11:51:08 Shire kernel: [560144.866733] Enabling non-boot CPUs ... Jan 9 11:51:08 Shire kernel: [560144.886162] x86: Booting SMP configuration: Jan 9 11:51:08 Shire kernel: [560144.886164] smpboot: Booting Node 0 Processor 1 APIC 0x1 Jan 9 11:51:08 Shire kernel: [560144.949996] cache: parent cpu1 should not be sleeping Jan 9 11:51:08 Shire kernel: [560144.950235] CPU1 is up Jan 9 11:51:08 Shire kernel: [560144.970281] smpboot: Booting Node 0 Processor 2 APIC 0x2 Jan 9 11:51:08 Shire kernel: [560145.033976] cache: parent cpu2 should not be sleeping Jan 9 11:51:08 Shire kernel: [560145.034218] CPU2 is up Jan 9 11:51:08 Shire kernel: [560145.054307] smpboot: Booting Node 0 Processor 3 APIC 0x3 Jan 9 11:51:08 Shire kernel: [560145.117943] cache: parent cpu3 should not be sleeping Jan 9 11:51:08 Shire kernel: [560145.118182] CPU3 is up Jan 9 11:51:08 Shire kernel: [560145.125847] ACPI: Waking up from system sleep state S3 The only thing that seemed wrong are those Broke affinity for irq X lines. So I started looking around with that line as key phrase. And found a way to fix this.\nOn Ubuntu, if you run cat /proc/acpi/wakeup, it shows something like this -\n-\u0026gt; % cat /proc/acpi/wakeup Device S-state Status Sysfs node LID S4 *enabled platform:PNP0C0D:00 SLPB S3 *enabled platform:PNP0C0E:00 IGBE S4 *enabled pci:0000:00:19.0 EXP3 S4 *disabled pci:0000:00:1c.2 XHCI S3 *enabled pci:0000:00:14.0 EHC1 S3 *enabled pci:0000:00:1d.0 EHC2 S3 *enabled pci:0000:00:1a.0 HDEF S4 *disabled pci:0000:00:1b.0 These are the components that have (or not) to wake your device up from sleep. I found some reference about what those codes are -\nLID = Laptop lid PWRB = Power button SLPB = Sleep Button IGBE = Integrated Ethernet Controller EXP3 = HDEF = PS2K = PS/2 keyboard PS2M = PS/2 mouse RP0x or EXPx = PCIE slot #x (aka PCI Express Root Port #x) EHCx or USBx = USB 2.0 (EHCI) chip XHC = USB 3.0 (XHCI) chip PEGx = PCI Express for Graphics slot #x From the output of the previous command, the enabled ones can wake your device up for any reason. Now the only way to check which one is to disable one …","date":1483948740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1483948740,"objectID":"6a807c24281840a4e02ce74f28078559","permalink":"https://bibhasdn.com/blog/fixing-immediate-resume-of-system-after-suspend-on-linux-mint-ubuntu/","publishdate":"2017-01-09T07:59:00Z","relpermalink":"/blog/fixing-immediate-resume-of-system-after-suspend-on-linux-mint-ubuntu/","section":"posts","summary":"I recently bought a new (used) laptop, a Lenovo Thinkpad T430, and decided to install Linux Mint with KDE on it. I used to use Cinnamon but decided to give KDE a chance because I’ve used KDE apps before and they’re the finest.\nIt’s been running fine since then except, I’ve had this problem where once in a month or so, when I close the lid, the laptop sleeps for a second and then wakes up instantly. First I thought it was a kernel issue, so I updated the kernel and that fixed that somehow. So I kept using it but then again in about a month it happened again. I updated the kernel again, it went away. Then today morning it happened again. By now I’m pretty sure that it’s not a kernel issue. Something is stopping the system from falling into sleep. So I looked in to syslog and looked for logs around the time the wake up happened to see if there is any error logged there. I didn’t find any error and the log looked like this -\n","tags":["linux","kernel"],"title":"Fixing Immediate Resume of System after Suspend, on Linux Mint/Ubuntu","type":"posts"},{"authors":null,"categories":null,"content":"Happy new year 2017! As we celebrate the beginning of this new year, I’d like to jot down what all I did in 2016.\nJanuary Got married!\nEverything was decided in the last quarter of 2015. And finally on 29th January, Ayanti and I got married on a not-so-cold winter evening. The journey that started 5 years ago at an Anime club meetup (Yeah!), evolved to it’s next stage. Got some photos on Flickr to share with you all. :)\nFebruary Quiet month roaming around Kolkata and nearby areas. Visited Dakshineshwar and Mayapur. Had my first heat stroke. Didn’t drink enough water on a hot day, then stood under the sun for couple of hours and that did it. One moment I was seeing yellow grid lines, next moment I’m on the ground with Ayanti and mom pouring water on my head. It was an interesting experience though. Hopefully wont happen again.\nMarch Another significant month. Ayanti and me finally move to Bangalore. We move into our tiny one room apartment on the roof in Murugeshpalya. Roamed around the city. The malls and restaurants specifically. We love to eat, and Bangalore has plethora of food options. So it was fun. :)\nNext we thought of travelling somewhere. So one fine day, took a bus and headed for Yercaud, Tamil Nadu. It’s a small town on top of a hill. We took a KSRTC Airavat bus to Salem, then a local bus to Yercaud. Salem was bloody hot! But as we climbed the 20 hairpin bend to the top of the hill, the weather became much more pleasant. Our hotel room was on first floor and we could see the clear sky and the Yercaud lake from the balcony. It was a lovely experience.\nYercaud is a nice place to spend couple of days. The lake, Dear park, Rose Garden, Lady’s seat, Gent’s Seat, Children’s seat. The view from the top was mesmerizing.\nApril Ayanti visited her first flea market at Indiranagar Club. More hopping around the city.\nMay I got an interview call from a privacy concerned company in Munich. And they only offered to fund for a day. So I prepared for a trip to Munich for a day! After some major moving around for documents and several hours of waiting at VFS, got a Schengen visa for 3 days(!). It was a 3 hour flight to Muscat from Bangalore and then a 7 hour flight to Munich from there. I reached Munich at around 7PM and it was still sunny! Took a subway to the city and checked into the hotel. It was about 8:30PM and the sky was still lit. That was a funny experience. But the night came so much rapidly to make up for it.\nMet Konark, had dinner. And went to sleep. Next morning headed for the interview. Which didn’t go very well and I failed it, but learned some valuable lessons in the process, which is shaping my life right now as I write this blog post. So overall, it was a good experience.\nThen I had about 6 hours in hand, before my return flight. So roamed around Munich, with my backpack and a handbag. Took several subway rides. Walked around for couple of hours. At the end of which I wished I could drop on the street and sleep a little. But I had to come back. So headed for airport. Then another 2 hours in checking in and waiting for the flight. My flight was at 10PM and my visa was valid till 12 midnight. So that was pretty exciting few hours.\nLoved the chocolate collections at the duty free stores!\nThen back to home. Slept like a log for a day or two.\nAfter about 10 days, we decided to take a trip to Goa. Not the tourist infested Goa. We chose Palolem, south Goa which is much more quiet and secluded. And it was almost the beginning of rainy season, so almost no crowd there. Took a bus to Canacona and then auto to hotel. Spent some lovely days there. The sea, mountains, scooter ride on a quiet road. And some good food. It was a perfect trip. Except, right before coming back, Ayanti fell down and injured her leg. We just considered the wound a souvenir and moved on.\nJune More hopping around the city and eating more delicious food. Then in 3rd week we visited Kolkata to attend my niece’s first birthday! She grew up so fast! I couldn’t miss it!\nJuly We moved to a new place. Out of my one room flat, to a 1BHK in the same area. On the roof, so we have a whole roof to ourselves and a new view of the sky.\nAugust Active month for us. I bought my first cycle, a BTWIN MyBike 7S from Decathlon. And Ayanti joined her Zumba class. I also started going to weekly rides with Sathya.\nThen we visited the Shivanasamudram Falls with Sathya and Jo. That was a fine day.\nMet sir Ashwinsid after years at Toit.\nSeptember The month of JSFoo and MetaRefresh. They are 2 tech events on Javascript and UI/UX by HasGeek. I was asked to volunteer in these events as a photographer, because I like photographs, and the usual photographer was not present. Result -\nNear the end of the month, by office laptop’s one hinge and CPU fan busted. So I was desperately looking for a new laptop. And after a lot of drama on ecom websites, I got myself a used ThinkPad T430, which came with 4GB(2+2) RAM and 320GB HDD. Then bought an 8GB RAM. Then installed both …","date":1483689540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1483689540,"objectID":"a86ee6af2c7a9c3067fd3ea132c3ed90","permalink":"https://bibhasdn.com/blog/remembering-2016/","publishdate":"2017-01-06T07:59:00Z","relpermalink":"/blog/remembering-2016/","section":"posts","summary":"Happy new year 2017! As we celebrate the beginning of this new year, I’d like to jot down what all I did in 2016.\nJanuary Got married!\nEverything was decided in the last quarter of 2015. And finally on 29th January, Ayanti and I got married on a not-so-cold winter evening. The journey that started 5 years ago at an Anime club meetup (Yeah!), evolved to it’s next stage. Got some photos on Flickr to share with you all. :)\n","tags":["yearly","life"],"title":"Remembering 2016","type":"posts"},{"authors":null,"categories":null,"content":"I love graphic novels. They are a visual treat, the best way to tell stories. And I also like to travel and reading about travel stories. I’ve come across some graphic novels on travel that tells you about real places and real people. So thought of mentioning them here. I’ve read some of them, and plan to read the others soon.\nJapan Ai: A Tall Girl’s Adventures in Japan Author: Aimee Major-Steinberger\nJoin Aimee Major Steinberger on the ultimate fangirl vacation in Japan!\nThis rapid-fire adventure is full of everything fans dream of seeing: cosplay on the infamous Harajuku Street, fantasy restaurants, maid cafes, Tokyo’s largest doll store, beautiful shrines, bookstores full of manga, outrageous all-female Takarazuka musicals, cherry festivals, hot springs, special ceremonies, and so much more!\nShenzhen: A Travelogue from China Author: Guy Delisle\nGuy Delisle’s work for a French animation studio requires him to oversee production at various Asian studios on the grim frontiers of free trade. His employer puts him up for months at a time in ‘cold and soulless’ hotel rooms where he suffers the usual deprivations of a man very far from home. After Pyongyang, his book about the strange society that is North Korea, Delisle turned his attention to Shenzhen, the cold, urban city in Southern China that is sealed off with electric fences and armed guards from the rest of the country. The result is another brilliant graphic novel - funny, scary, utterly original and illuminating.\nJerusalem: Chronicles from the Holy City Author: Guy Delisle\nGuy Delisle expertly lays the groundwork for a cultural road map of contemporary Jerusalem, utilizing the classic stranger in a strange land point of view that made his other books, Pyongyang, Shenzhen, and Burma Chronicles required reading for understanding what daily life is like in cities few are able to travel to. In Jerusalem: Chronicles from the Holy City, Delisle explores the complexities of a city that represents so much to so many. He eloquently examines the impact of the conflict on the lives of people on both sides of the wall while drolly recounting the quotidian: checkpoints, traffic jams, and holidays.\nWhen observing the Christian, Jewish, and Muslim populations that call Jerusalem home, Delisle’s drawn line is both sensitive and fair, assuming nothing and drawing everything. Jerusalem showcases once more Delisle’s mastery of the travelogue.\nPyongyang: A Journey in North Korea Author: Guy Delisle\nFamously referred to as one of the “Axis of Evil” countries, North Korea remains one of the most secretive and mysterious nations in the world today. In early 2001 cartoonist Guy Delisle became one of the few Westerners to be allowed access to the fortress-like country. While living in the nation’s capital for two months on a work visa for a French film animation company, Delisle observed what he was allowed to see of the culture and lives of the few North Koreans he encountered; his findings form the basis of this graphic novel.\nBurma Chronicles Author: Guy Delisle\n‘Burma Chronicles’ presents a personal and distinctively humorous glimpse into a political hotspot, putting a popular spin on current affairs.\nHow to Understand Israel in 60 Days or Less Author: Sarah Glidden\nA stunningly accomplished debut graphic novel, HOW TO UNDERSTAND ISRAEL IN 60 DAYS OR LESS is Sarah Glidden’s charming and funny travel memoir of her trip through Tel Aviv, Jerusalem, the Golan Heights, Masada and other historic locales, brought to life with lush watercolors in all of their quirky and breathtaking detail.\nAt the same time, ISRAEL is a sensitive, deeply thoughtful and personal examination of a highly charged issue, an account of a journey Sarah never expected to take. Her experience clashes with her preconceived notions again and again, particularly when she tries to take a non-chaperoned excursion into the West Bank. As she struggles to “understand Israel,” Sarah is forced to question first her beliefs, then ultimately her own identity.\nPalestine Author: Joe Sacco\nIn late l991 and early 1992, at the time of the first Intifada, Joe Sacco spent two months with the Palestinians in the West Bank and Gaza Strip, travelling and taking notes. Upon returning to the United States he started writing and drawing Palestine, which combines the techniques of eyewitness reportage with the medium of comic-book storytelling to explore this complex, emotionally weighty situation. He captures the heart of the Palestinian experience in image after unforgettable image, with great insight and remarkable humour.\nTokyo on Foot: Travels in the City’s Most Colorful Neighborhoods Author: Florent Chavouet\nFlorent Chavouet, a young graphic artist, spent six months exploring Tokyo while his girlfriend interned at a company there. Each day he would set forth, with a pouch full of colored pencils and a sketchpad, to visit different neighborhoods. This stunning book records the city that he got to know during his adventures, …","date":1482911940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1482911940,"objectID":"6bbab53ed8392d83f859b06e53496fbd","permalink":"https://bibhasdn.com/blog/graphic-novels-on-travel/","publishdate":"2016-12-28T07:59:00Z","relpermalink":"/blog/graphic-novels-on-travel/","section":"posts","summary":"I love graphic novels. They are a visual treat, the best way to tell stories. And I also like to travel and reading about travel stories. I’ve come across some graphic novels on travel that tells you about real places and real people. So thought of mentioning them here. I’ve read some of them, and plan to read the others soon.\nJapan Ai: A Tall Girl’s Adventures in Japan Author: Aimee Major-Steinberger\n","tags":["book"],"title":"Graphic novels on travel","type":"posts"},{"authors":null,"categories":null,"content":"Unless you’ve been living under a rock for last few weeks, I’m sure you’ve seen at least one of these ads around you -\nFree Basics ads on different media Because you’re here, I’m assuming that you’re interested in knowing more about this “Free Basics” everyone is talking about. For those who have heard of “Internet.org” before, Free Basics is just a re-branded Internet.org with couple of changes here and there. For those who haven’t heard of any of this before, here goes -\nFree Basics is a program by Facebook where they make a deal with the Telecom Operators like Reliance etc to provide the said Telco’s millions of customers free(as in without paying for it) access to a handful of websites from the Internet. These websites are handpicked by Facebook itself. (If you want your website to show up to these millions of people, you have to apply for it and it has to get approved by Facebook). These websites may include news, health-care, education, public service related websites. Those too are chosen by Facebook. Facebook is not charging these websites anything to apply or get approved. Facebook isn’t charging anything to the customers. It definitely looks like a generous charity and a good thing, right?\nLike everything else, the devil is in the details. Please remember that Facebook’s target market isn’t you or me who have 24/7 WiFi access at home or office and who have been using Internet for 10 years. No, their target market are the people from Indian/African villages, most of whom probably never heard about Internet, maybe even computers. To some of them, the concept that people living in another village or a big city can talk to them instantly over something like an Instant Messaging service, is a distant dream. If you go to one such village today and try to explain “Internet” to them and say that “Internet” actually originated in the Dwapara Yug by Indra Devta, they might actually believe you. Because they have no way to validate that information.\nWhat Facebook is trying to do is create a small network of curated websites, let’s call it “Facebooknet” while you’re reading this article, and give that to people with absolutely no connectivity to the Internet. This looks like as incredible generous feat that will connect billions of our countrymen with us. But think about this for a moment.\nFacebook’s intention is to keep people Inside Facebook. A survey done in Indonesia and Nigeria showed that people who were given access to Facebook stayed inside Facebook and had no idea that they were actually using Internet! To them Facebook and Internet had a very different meaning! This is what Facebook wants in India.\nI talked to a friend who is currently using Free Basics on a Reliance SIM. When you use Free Basics, you never leave Facebook’s domain. Any website that is available to Free Basics, is read by Facebook and then shown to you on the Free Basics domain itself. Your original request never even touch the website you’re trying to reach. This is what Facebook wants. For you to never leave Facebook.\nWhat’s wrong with a curated web? When you say “news providing website”, you are thinking about the news sites that you trust and know that provide almost impartial news. But what if the sites you trust don’t apply for the Free Basics program? What if that other site that you know provides misinformation, does apply for Free Basics and gets access to it? Exactly the same with all the other category. If anyone ever wanted to control information for Billions of people, they’d choose Free Basics. That’s the potential use of Free Basics.\nAlso, the problem with a curated web is that the curator chooses the flow of information. Want news about the ongoing trouble in Telengana or Sikkim? Well, you can’t, if the Free Basics chosen news website doesn’t cover it. Sounds good?\nUnder the hood Now if you’d let me get a bit technical, here is the Participation Guideline of Free Basics for companies that want to make their websites available on Facebooknet. According to it,\nYour site(s) may be proxied to make your content available through Free Basics.\nThis is what this means -\nIt means that all your requests go through Facebook’s proxy server. Facebook says that, it is so that the requests and responses are optimized for mobile access. But that also means that Facebook reads everything and can tamper with everything.\nWhoa! So Facebook will read and modify my Facebooknet traffic live? Yep.\nIn order for your content to be proxied as described above, your URLs may be re-written and embedded content (like javascript and content originating from another domain) removed. In addition, secure content is not supported and may not load.\nSo Facebook is saying outright that they will modify the content of those sites and any content using Javascript etc will be blocked. Embedded Content also includes videos. So they wont be available either. And the most important part is that secure content is not supported. Bye Bye privacy and security.\nHere …","date":1451462340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1451462340,"objectID":"d9025262d11dbef607d000f6e21b769d","permalink":"https://bibhasdn.com/blog/free-basics-by-facebook-is-a-nightmare-on-the-internet/","publishdate":"2015-12-30T07:59:00Z","relpermalink":"/blog/free-basics-by-facebook-is-a-nightmare-on-the-internet/","section":"posts","summary":"Unless you’ve been living under a rock for last few weeks, I’m sure you’ve seen at least one of these ads around you -\nFree Basics ads on different media Because you’re here, I’m assuming that you’re interested in knowing more about this “Free Basics” everyone is talking about. For those who have heard of “Internet.org” before, Free Basics is just a re-branded Internet.org with couple of changes here and there. For those who haven’t heard of any of this before, here goes -\n","tags":["facebook","internet","privacy"],"title":"Free Basics by Facebook is a Nightmare on the Internet","type":"posts"},{"authors":null,"categories":null,"content":"The annual Kolkata International Film Festival started yesterday in Kolkata. And like every year they have a website - http://kff.in\nI was looking forward to this event like every year. But opening the website was one of the massive disappointments for me in some time. I’ll briefly explain why.\nFor an event like KIFF, the basic requirement for the website is to have a list of movies being shown and the corresponding venues. And also the other way around - a list of venues and the movies being played there.\nNow, they are playing more than a 100 movies this time. And they are all divided in the categories like India Unheard, International Competition, Focus Hollywood etc. Well, some of them didn’t make any sense without the context of naming them, still, I’d say that they did a good job there. But here comes the funny part. You can see the list of movies when you click a category, but when you click a movie, there is no information about the venue it’s being played at. To find the venue for a particular movie, you have to go to the venues listing page, travel every venue page and press Ctrl+F and search for the movie name. There is no site-wide search feature. None.\nFun, right?\nWell, to save myself the pain, I put together all the venues and their schedules and put them in this little Google Spreadsheet where you can search all the venues in one go. Just press Ctrl+H and search for movie name. You can also go to any tab for any venue and click the movie names for more information.\nHope this is of some help to you.\nPS: BTW, neither the KIFF website nor ticket counter nor venues say it anywhere that if you go with a camera, they’ll not let you enter the hall. And they wont refund the ticket money either. So, be careful. The security guard at Rabindra Sadan asked me to leave my camera on the stairs outside the movie hall. He probably didn’t have a clean bowel movement in the morning.\n","date":1447660740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1447660740,"objectID":"3d4532eb16055d1778de1d01ae63cbf9","permalink":"https://bibhasdn.com/blog/kolkata-international-film-festival-2015-kff-kiff-searchable-schedule/","publishdate":"2015-11-16T07:59:00Z","relpermalink":"/blog/kolkata-international-film-festival-2015-kff-kiff-searchable-schedule/","section":"posts","summary":"The annual Kolkata International Film Festival started yesterday in Kolkata. And like every year they have a website - http://kff.in\nI was looking forward to this event like every year. But opening the website was one of the massive disappointments for me in some time. I’ll briefly explain why.\nFor an event like KIFF, the basic requirement for the website is to have a list of movies being shown and the corresponding venues. And also the other way around - a list of venues and the movies being played there.\n","tags":[],"title":"Kolkata International Film Festival(KFF/KIFF) 2015 Searchable Schedule","type":"posts"},{"authors":null,"categories":null,"content":"I’ve been a DuckDuckGo user for few users now. The idea of having no history of my searches, or rather not having to provide any identity to search the Internet, has always attracted me. Almost all the other search engines actively keep a track of who is searching what so that they can search better “personalized” results. Which also means that they know what you are looking for, at what time, from where etc.\nData is beautiful. The more you have, the more patterns you can find in them. It’s hard to imagine what someone can learn about you when they look at your search history over years. Your whole life becomes a plain text book that someone can read.\nFor such reasons DuckDuckGo has been my primary search engine for years. And over time, I’ve come to know more about how much customizable DDG is. DDG has something called Instant Answers that tries to provide you what you’re looking for without any extra clicks. Like the currency changing IA -\nAnd the fun part is that, this IA part of DDG is open source. And there is a whole community around it. I started contributing to the IA repositories few months back and started to meet people virtually. I found some more people around me who were contributing to DDG. Well, a meetup was inevitable.\nDDG organizes an event called Quack and Hack around the planet that brings together the developers that contributes to DDG. Around 3 months back when they organized one in New York, I replied back on Twitter saying that it’d be nice to have one in India too.\nDon’t miss our New York City Quack \u0026amp; Hack this Saturday: http://t.co/LVTjFtWlIt #nytech #quackny\n— DuckDuckHack (@duckduckhack) March 30, 2015 With me, Abdul also expressed the same for Bangalore.\n@bibhasdn I am thinking of organizing one here in Bangalore @duckduckhack /cc @zacpappis\n— Abdul Rauf (@haseeb_offline) March 30, 2015 After that Abdul and me got in touch with the DDG community about organizing a Q\u0026amp;H here in India and we finally found a date and organized one in HasGeek House, Domlur, Bangalore on June 3rd.\nAbout 15 people attended that event. We gave introduction to how DDG works, how the Instant Answers work. And how people can use a search engine that they can hack themselves for better results.\nHere are some tweets and pictures from the first event -\n.@bibhasdn talking about Duckduckgo and open source at Quack \u0026amp; Hack @hasgeek pic.twitter.com/oHTkn3BuIh\n— Arun (@finiterecursion) June 3, 2015 @bibhasdn helping folks to set up environment for @duckduckgo at @hasgeek house. #QuackAndHack #Bangalore Meet-up. pic.twitter.com/fKRINWBsRK\n— Sagar Hani (@sagarhan_i) June 3, 2015 @bibhasdn Talking about @duckduckgo \u0026amp; @duckduckhack at @hasgeek house. pic.twitter.com/psUCxH8Ov8\n— Sagar Hani (@sagarhan_i) June 3, 2015 After that a lot of people showed interest to attend the event, so we decided to organize another event after a month. So we organized the second event on July 5th at Mozilla Community Space Bangalore. The space was larger. About 40 people attended. Hence we had to cover basics once more. We had some contributors demo what they have been building too. We showed how to build Cheat sheets. Some of the attendees also worked on their own cheat sheets. We’re hoping to get into something advanced in next event. :) We also had pizza and Pepsi for lunch and got couple of nice group pictures. :D\nHere are some pictures and tweets from the second event -\n.@sagarhan_i demoing how to build cheatsheets @duckduckhack #quackandhack pic.twitter.com/mpb4ym3zqa\n— Bibhas Debnath (@bibhasdn) July 5, 2015 #quackandhack Bangalore is on happening and there\u0026#39;s a lot of people! @duckduckhack @duckduckgo pic.twitter.com/bEIp7yinhc\n— Bibhas Debnath (@bibhasdn) July 5, 2015 . @bibhasdn giving introduction about Instant answers #quackandhack bangalore pic.twitter.com/8aY6dpb6mL\n— Abdul Rauf (@haseeb_offline) July 5, 2015 We’re getting more and more people interested to use DDG and building Instant Answers. It’s actually fun to be able to customize your search engine. DDG brought back the fun to search the Internet.\n","date":1436601540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1436601540,"objectID":"9ea1951d3a9cbf4f9589b1b04d454884","permalink":"https://bibhasdn.com/blog/quack-and-hack-bangalore-chapter/","publishdate":"2015-07-11T07:59:00Z","relpermalink":"/blog/quack-and-hack-bangalore-chapter/","section":"posts","summary":"I’ve been a DuckDuckGo user for few users now. The idea of having no history of my searches, or rather not having to provide any identity to search the Internet, has always attracted me. Almost all the other search engines actively keep a track of who is searching what so that they can search better “personalized” results. Which also means that they know what you are looking for, at what time, from where etc.\n","tags":[],"title":"Quack \u0026 Hack Bangalore Chapter","type":"posts"},{"authors":null,"categories":null,"content":"So I moved to Bangalore again last month. My new home is about 9km from my office. It’s not so bad because I don’t have to go to office everyday. Still, travelling in Bangalore has always been a bit pain for me, me being from Kolkata where everything is cheaper, specially transportation. You can travel 10km for Rs20 in the same auto that would cost you Rs130 in Bangalore, just because the concept of shared travelling is a big thing in Kolkata(which I wish were true in Bangalore). You have taxis in Kolkata which costs a bit less than Autos in Bangalore. Taxis in Kolkata costs about Rs12/km whereas autos in Bangalors costs about Rs13/km. And even buses are cheaper in Kolkata. Usually it’s Rs6 for first 4 km, and then increases by Rs2 for each 2-4 km. You can literally travel 12-14km for Rs10 in some routes. AC buses costs a bit more, but rarely more than Rs50 unless you’re travelling the whole route.\nAnyway, back to travelling in Bangalore. I try to ride the buses wherever it’s possible. But the bus routes are odd. There isn’t always buses that take the shortest route between 2 places and most of the times you have to change bus 2-3 times to get to where you want. And add to that, the bus stops are at least 500-600 meter away from where you’d want to go, i.e. places of interest like malls etc. It’s good for a healthy traffic, I get it. But people are lazy and have money to spare. Lot of them would just book a cab than walk for 600m and then get a bus, which, I think, then adds up to the usual heavy traffic nowadays.\nFor some such reasons, I end up taking an auto or a cab if I’m really tired or have heavy luggage with me or dont have much time to spare. And that hurts the wallet. Auto is kind of the cheapest mode of transport (excluding the bus) and it costs Rs13/km. And most of the places I want to go is about 6-10km away.\nOlacabs I’ve read Ola cabs publicize by saying that they are cheaper than Autos nowadays. Even some friends mentioned that to me. Mostly because the Ola Mini costs Rs10/km after 4km. But Ola cabs also costs you Rs80 for that 4km. So I thought of drawing a graph of Auto fare and the ola cabs to see how cheap they are compared to the Autos. This is what I got -\nAuto fare: Rs25 for first 1.9km, Rs13/km after that. Ola Bangalore fares are on their website.\nSo, turns out Ola Mini is cheaper only if you travel more than 13km. I’m sorry I didn’t notice but by the time I wrote this post, Olacabs has increased their fare and introduced time based charges like Uber. So I put in those numbers and above is the graph you see. I could not find a minimum distance that you’d want to travel in an auto for which Ola Mini is cheaper now. And also, please remember, this is excluding the Rs50 surge pricing you see most of the times nowadays. If I include that Rs50, then you’d have to travel 30km before Ola mini becomes cheaper than Auto. So this whole ola-is-cheaper-than-auto thing has no leg given that you’d usually want to travel 6-10km.\nThen I thought of comparing the other cab services available with the auto fare, just because.\nMeru cabs Here is Meru Cabs -\nTaxiForSure (This one needs updating. TFS got eaten by Olacabs.)\nAnd TaxiForSure -\nI think TaxiForSure Nano is the only option that’s always cheaper than Autos. And I think that’s also the reason why I never found one to book.\nUber The other major player is Uber. Now it’s not really possible to calculate Uber cost as they take both Time and Distance into consideration. But I still made some effort. According to the Bangalore Mobility Indicator published in 2011, the average vehicle speed in Bangalore was 15-25km per hour. That’s 15km if you’re really unlucky and 25km if you’re really lucky. So I took the average of that and assumed al the Uber vehicles travel 20km per hour. It might be 25 if you’re lucky, 15 if you’re not. So at 20km/hour, that’s 1km per 3 minutes.\nUpdate: As of August 25, 2015, Uber has updated their pricing and almost doubled the per km price after first 15km.\nI put those numbers in and I got this -\nUpdate: I didn’t add UberGO at first becaue it’s missing on their website itself. And as I don’t use Uber, my only source of data was their website. Anyway, I added the UberGO data. And it seems they are cheaper than auto above 6km. Which is good, but not sure about their availability.\nSo UberX is cheaper than Auto if you’re travelling more than 16km. And the name says “Fixed” as the numbers for first 3-4km are not the actual numbers as Uber has a minimum fare.\nThat was fun. Now let’s put all of them together -\nOla Prime tops all of them and TaxiForSure Nano is at the bottom.\nUpdate: I know that autos ask for extra a lot of the times. And there is a bit of haggling involved to get by meter. But look at the charts above, and tell me, would you blame them for asking for a little extra when they are providing the same service as those charging almost twice or thrice? And if you think you’re saving the trouble of haggling by opting for a cab, …","date":1430639940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1430639940,"objectID":"dffb5c739c6051c151e06cd16f983719","permalink":"https://bibhasdn.com/blog/bangalore-auto-fare-vs-rest-of-the-options/","publishdate":"2015-05-03T07:59:00Z","relpermalink":"/blog/bangalore-auto-fare-vs-rest-of-the-options/","section":"posts","summary":"So I moved to Bangalore again last month. My new home is about 9km from my office. It’s not so bad because I don’t have to go to office everyday. Still, travelling in Bangalore has always been a bit pain for me, me being from Kolkata where everything is cheaper, specially transportation. You can travel 10km for Rs20 in the same auto that would cost you Rs130 in Bangalore, just because the concept of shared travelling is a big thing in Kolkata(which I wish were true in Bangalore). You have taxis in Kolkata which costs a bit less than Autos in Bangalore. Taxis in Kolkata costs about Rs12/km whereas autos in Bangalors costs about Rs13/km. And even buses are cheaper in Kolkata. Usually it’s Rs6 for first 4 km, and then increases by Rs2 for each 2-4 km. You can literally travel 12-14km for Rs10 in some routes. AC buses costs a bit more, but rarely more than Rs50 unless you’re travelling the whole route.\n","tags":[],"title":"Bangalore Auto fare vs Rest of the options","type":"posts"},{"authors":null,"categories":null,"content":"Few days back I had an assignment to visualize a network of people who talk to each other. I needed to find the people who are contacted most. Drawing a network graph seemed like the best way to find it out visually.\nSo I looked around for tools that could help with it and came across Networkx. They have a nice documentation and a Lot of examples on drawing different kinds of graphs. I decided to try it out. Here’s how to draw a simple undirected graph with it -\nimport networkx as nx import matplotlib.pyplot as plt def draw_graph(graph): # create networkx graph G=nx.Graph() # add edges for edge in graph: G.add_edge(edge[0], edge[1]) # There are graph layouts like shell, spring, spectral and random. # Shell layout usually looks better, so we\u0026#39;re choosing it. # I will show some examples later of other layouts graph_pos = nx.shell_layout(G) # draw nodes, edges and labels nx.draw_networkx_nodes(G, graph_pos, node_size=1000, node_color=\u0026#39;blue\u0026#39;, alpha=0.3) nx.draw_networkx_edges(G, graph_pos) nx.draw_networkx_labels(G, graph_pos, font_size=12, font_family=\u0026#39;sans-serif\u0026#39;) # show graph plt.show() # draw example # graph is a list of tuples of nodes. Each tuple defining the # connection between 2 nodes graph = [(20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 20)] draw_graph(graph) And this is the image that’s produced -\nWe can try adding some more edges and see how it looks. E.g. -\ngraph = [ (20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 20), (25, 21), (23, 20), (24, 22) ] This generates -\nNeat!\nDirected Graph But the above graph is undirected. I needed directed to know which node is receiving more connections from others. Then I found out that Networkx has a Graph class called DiGraph, which can be used to draw directed graphs. Let’s try that -\ndef draw_graph(graph): # create directed networkx graph G=nx.DiGraph() # add edges G.add_edges_from(graph) graph_pos = nx.shell_layout(G) # draw nodes, edges and labels nx.draw_networkx_nodes(G, graph_pos, node_size=1000, node_color=\u0026#39;blue\u0026#39;, alpha=0.3) # we can now added edge thickness and edge color nx.draw_networkx_edges(G, graph_pos, width=2, alpha=0.3, edge_color=\u0026#39;green\u0026#39;) nx.draw_networkx_labels(G, graph_pos, font_size=12, font_family=\u0026#39;sans-serif\u0026#39;) # show graph plt.show() # we can add more edges here as the direction is a factor now, # edges are added as (from_node, to_node) tuples # hence (22, 25) and (25, 22) are different. In undirected graph, # we couldn\u0026#39;t have told the difference. graph = graph = [ (20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 20), (25, 21), (23, 20), (24, 22), (21, 24), (20, 21) ] draw_graph(graph) This generates -\nThat works great! But we’re still missing one thing, a label for the edge.\nlabels = range(len(graph)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] edge_labels = dict(zip(graph, labels)) # {(23, 20): 7, (22, 23): 2, (20, 21): 10, (24, 25): 4, (21, 22): 1, (25, 20): 5, (24, 22): 8, (25, 21): 6, (23, 24): 3, (21, 24): 9} nx.draw_networkx_edge_labels(G, graph_pos, edge_labels=edge_labels) # show graph plt.show() Which generates -\nYou can follow the same data structure and add any label you want to the edges.\nLayouts Now let’s try out the other layouts we mentioned -\nSpring layout graph_pos = nx.spring_layout(G) Spectral layout graph_pos = nx.spectral_layout(G) Random layout graph_pos = nx.random_layout(G) Overall, I am liking Networkx. There are many more types of graphs that can be drawn. Can’t wait to try them.\n","date":1417870800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1417870800,"objectID":"cfcc7b50618d7589a58a3f648dcea6a5","permalink":"https://bibhasdn.com/blog/visualizing-networks-with-python-and-networkx/","publishdate":"2014-12-06T13:00:00Z","relpermalink":"/blog/visualizing-networks-with-python-and-networkx/","section":"posts","summary":"Few days back I had an assignment to visualize a network of people who talk to each other. I needed to find the people who are contacted most. Drawing a network graph seemed like the best way to find it out visually.\nSo I looked around for tools that could help with it and came across Networkx. They have a nice documentation and a Lot of examples on drawing different kinds of graphs. I decided to try it out. Here’s how to draw a simple undirected graph with it -\n","tags":[],"title":"Visualizing Networks with Python and Networkx","type":"posts"},{"authors":null,"categories":null,"content":"Yesterday, I was standing at a road crossing waiting for the signal to turn green to cross the road. There was a “No U Turn” sign at the crossing and couple of traffic police. Then a taxi comes and wants to take a right turn, from the look of it because the passanger couple wanted him to. The traffic police stops them of course. Then the male passanger, who was dressed really well with formal shirts (If you met him any random day he’d introduce himself as a gentleman I’m sure), starts arguing with the traffic police. His point being he’s taken right on that crossing before so he can take right again.\nThe traffic police shows him the sign ans ask them to go ahead and take the next right. But the passanger keeps arguing, and slowly gets angry. His wife/gf/co-passanger slowly joins him and supports him. The traffic police starts insisting that they don’t argue and take the next turn. The passanger starts getting really angry this time and starts talking is loud voice.\nThe taxi driver then realizes that he can’t take a right, so he starts picking up the speed. But the passanger is really furious by then. And just as the taxi starts picking up speed, he says something really offensive to the traffic police. The police, hearing that, shouts at the taxi driver and asks him to stop the taxi so that he can do something about it. The driver doesn’t stop and they speed away.\nNow think a little, I’m sure you’ve seen something similar happen around you before. It’s clearly written that you can’t take a U turn. Or in your case it might have been a “No Parking” sign or something similar. What did the traffic police do to deserve bad-mouthing? Just because you’ve taken U turn on that crossing before, does that give you right to violate a traffic sign? And say offensice things to someone who stands at the crossing of a road trying to keep your journey smoother all day long?\nWhat really bothers me is that these people who wears nice cloths and speaks nice language behaves like this while on road. These people cannot follow a simple traffic rule and don’t even know how to talk to another person. Any given day that traffic police works harder than you and me. They deserve more respect from us than you can think of. Let’s just try to give them that. Look around you, you’ll find such people around you all the time. You neighbours, relatives, acquaintances. If you see something like that and have a chance to speak some sense, please do.\n","date":1409817540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1409817540,"objectID":"5196e58046a2831ffd788d2705596120","permalink":"https://bibhasdn.com/blog/we-should-blame-ourselves-first/","publishdate":"2014-09-04T07:59:00Z","relpermalink":"/blog/we-should-blame-ourselves-first/","section":"posts","summary":"Yesterday, I was standing at a road crossing waiting for the signal to turn green to cross the road. There was a “No U Turn” sign at the crossing and couple of traffic police. Then a taxi comes and wants to take a right turn, from the look of it because the passanger couple wanted him to. The traffic police stops them of course. Then the male passanger, who was dressed really well with formal shirts (If you met him any random day he’d introduce himself as a gentleman I’m sure), starts arguing with the traffic police. His point being he’s taken right on that crossing before so he can take right again.\n","tags":[],"title":"We Should Blame Ourselves First","type":"posts"},{"authors":null,"categories":null,"content":"In my last post I demonstrated the use of JSON data type of PostgreSQL. But I skipped a crucial part, Indexes.\nAll my queries in last post ran on a table with about 24k rows with the JSON tweet data. That import script of mine is still running and I’ve crossed 100k records. I’ll run the same queries again, but this time I’ll create indexes for the appropriate columns before querying.\nAlso, I’ll explain briefly how you can use the full text search feature of PostgreSQL instead of using LIKE like I used in last blog post.\nLet’s first try to fetch all the tweets that have both the word “world” and “cup” in it -\ntweets=# create index \u0026#34;idx_text\u0026#34; on tweet using gin(to_tsvector(\u0026#39;english\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;)); CREATE INDEX tweets=# analyze tweet; ANALYZE tweets=# explain analyze select tid, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39; from tweet where to_tsvector(\u0026#39;english\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;) @@ to_tsquery(\u0026#39;world \u0026amp; cup\u0026#39;); QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- Bitmap Heap Scan on tweet (cost=61.03..8490.10 rows=3229 width=51) (actual time=4.146..358.203 rows=17037 loops=1) Recheck Cond: (to_tsvector(\u0026#39;english\u0026#39;::regconfig, (data -\u0026gt;\u0026gt; \u0026#39;text\u0026#39;::text)) @@ to_tsquery(\u0026#39;world \u0026amp; cup\u0026#39;::text)) -\u0026gt; Bitmap Index Scan on idx_text (cost=0.00..60.23 rows=3229 width=0) (actual time=3.325..3.325 rows=17037 loops=1) Index Cond: (to_tsvector(\u0026#39;english\u0026#39;::regconfig, (data -\u0026gt;\u0026gt; \u0026#39;text\u0026#39;::text)) @@ to_tsquery(\u0026#39;world \u0026amp; cup\u0026#39;::text)) Total runtime: 358.887 ms (5 rows) tweets=# explain analyze select tid, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39; from tweet where to_tsvector(\u0026#39;english\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;) @@ to_tsquery(\u0026#39;python \u0026amp; ruby\u0026#39;); QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- Bitmap Heap Scan on tweet (cost=28.13..91.09 rows=16 width=51) (actual time=2.969..12.769 rows=114 loops=1) Recheck Cond: (to_tsvector(\u0026#39;english\u0026#39;::regconfig, (data -\u0026gt;\u0026gt; \u0026#39;text\u0026#39;::text)) @@ to_tsquery(\u0026#39;python \u0026amp; ruby\u0026#39;::text)) -\u0026gt; Bitmap Index Scan on idx_text (cost=0.00..28.12 rows=16 width=0) (actual time=2.822..2.822 rows=114 loops=1) Index Cond: (to_tsvector(\u0026#39;english\u0026#39;::regconfig, (data -\u0026gt;\u0026gt; \u0026#39;text\u0026#39;::text)) @@ to_tsquery(\u0026#39;python \u0026amp; ruby\u0026#39;::text)) Total runtime: 12.841 ms (5 rows) The phenomenal time difference is dependant on the number of results -\ntweets=# select count(tid) from tweet where to_tsvector(\u0026#39;english\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;) @@ to_tsquery(\u0026#39;python \u0026amp; ruby\u0026#39;); count ------- 114 (1 row) tweets=# select count(tid) from tweet where to_tsvector(\u0026#39;english\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;) @@ to_tsquery(\u0026#39;world \u0026amp; cup\u0026#39;); count ------- 17037 (1 row) Just remember that these queries are running on almost 4 times the records compared to the last post.\nI think that gin(to_tsvector(\u0026#39;english\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;)) and where to_tsvector(\u0026#39;english\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;) @@ to_tsquery(\u0026#39;world \u0026amp; cup\u0026#39;) needs some explanation.\nGIN(Generalized Inverted Index) and GiST(Generalized Search Tree) indexes are two types of indexes on PostgreSQL that can be used to speed up the text search proxess. There are merits and demerits of both. As a rule of thumb, GIN indexes are best for static data because lookups are faster. Hence we’re using that.\nIt’s important to note that if you create index for to_tsvector(\u0026#39;english\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;) then while searching you much use the same to_tsvector method. If you use to_tsvector(data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;), the index might not be used.\nThe to_tsvector() function takes a text and breaks it up into tokens, then consults few dictionaries that recognizes those tokens and provides a more normalized lexems to represent the token. The stop words are also detected and ignored as they appear too frequently to be useful while searching. E.g. -\ntweets=# select to_tsvector(\u0026#39;english\u0026#39;, \u0026#39;Fifa world cup is ongoing\u0026#39;); to_tsvector ------------------------------------- \u0026#39;cup\u0026#39;:3 \u0026#39;fifa\u0026#39;:1 \u0026#39;ongo\u0026#39;:5 \u0026#39;world\u0026#39;:2 (1 row) to_tsquery() creates a tsquery value from querytext, which must consist of single tokens separated by the Boolean operators \u0026amp; (AND), | (OR) and ! (NOT).\ntweets=# select to_tsquery(\u0026#39;english\u0026#39;, \u0026#39;Fifa \u0026amp; world | cup\u0026#39;); to_tsquery -------------------------- \u0026#39;fifa\u0026#39; \u0026amp; \u0026#39;world\u0026#39; | \u0026#39;cup\u0026#39; (1 row) PostgreSQL doc has more details.\nThen the tsvector is searched with the tsquery using @@.\nNow let’s try searching for tweets with more than 5 favorites, both with and without indexes, so that we can compare -\ntweets=# explain analyze select tid, data#\u0026gt;\u0026gt;\u0026#39;{user,screen_name}\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;favorite_count\u0026#39; from tweet where CAST(data-\u0026gt;\u0026gt;\u0026#39;favorite_count\u0026#39; AS integer) \u0026gt; 5; QUERY PLAN ------------------------------------------------------------------------------------------------------------- Seq Scan on tweet (cost=0.00..21121.93 rows=32322 width=51) (actual time=1.901..2103.874 rows=100 loops=1) Filter: (((data -\u0026gt;\u0026gt; \u0026#39;favorite_count\u0026#39;::text))::integer \u0026gt; 5) Rows Removed by Filter: 96865 Total runtime: 2103.918 ms (4 rows) tweets=# create index \u0026#34;idx_fav_count\u0026#34; on tweet using btree(CAST(data-\u0026gt;\u0026gt;\u0026#39;favorite_count\u0026#39; AS integer)); CREATE INDEX tweets=# analyze tweet; …","date":1402732740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1402732740,"objectID":"7959ce9f53fbbd120c6ca6fd0b1edf5c","permalink":"https://bibhasdn.com/blog/postgresql-swag-part-2-indexing-json-data-type-and-full-text-search/","publishdate":"2014-06-14T07:59:00Z","relpermalink":"/blog/postgresql-swag-part-2-indexing-json-data-type-and-full-text-search/","section":"posts","summary":"In my last post I demonstrated the use of JSON data type of PostgreSQL. But I skipped a crucial part, Indexes.\nAll my queries in last post ran on a table with about 24k rows with the JSON tweet data. That import script of mine is still running and I’ve crossed 100k records. I’ll run the same queries again, but this time I’ll create indexes for the appropriate columns before querying.\n","tags":[],"title":"PostgreSQL SWAG Part 2: Indexing JSON data type and Full text search","type":"posts"},{"authors":null,"categories":null,"content":"When working on side projects that deal with 3rd party data, how much time do you spend on figuring out the database schema? Not an insignificant amount. You don’t use a DBMS you say? Good luck parsing the data files and querying them.\nI’m not going to start a DBMS comparison. I’ve spent a lot of time fiddling with structred data and PostgreSQL has been really kind to me. It’s stable, really feaure rich and it can literally do anything. You want to setup a cluster? Replication? Crunch geo spatial data? parse Gigabytes of CSV files? And want to do all of these really fast? Then PostgreSQL is for you, it can do all that and more out of the box. Just today a friend told me that PostgreSQL parsed and imported his 4.3GB CSV file in under 10 minutes. I’m happy with that performance.\nWe at KLP work with huge amount of data on daily basis and PostgreSQL has been helping us really well on our job. We’ve recently migrated all the databases to PostgreSQL 9.3 because of the native support for PostGIS and some more interesting features, I’ve written about some of them below. :)\nYou’ve probably heard about PostgreSQL’s JSON data type recently. This has made it possible to work with both structured and schema-less data. For example, I’ll talk about Twitter data here. As you know, Twitter provides their data from API in JSON format. And till now, if I ever had to work with Twitter data, I had to write a quick db schema, create a table, then parse the incoming JSON, insert it in the said table and then work with it. Now the provess is a bit faster. ;)\nFirst, I’ll create couple of small tables -\nCREATE TABLE tweet ( tid character varying NOT NULL, data json, CONSTRAINT tid_pkey PRIMARY KEY (tid) ) CREATE TABLE word ( id bigserial NOT NULL, text character varying(100), CONSTRAINT id_pkey PRIMARY KEY (id) ) tid field will store the id of the tweet and data field will store the json body of the tweet. The table word is to store the list of words I need to search for on Twitter and gather the sample data.\nHere is a sample script I used to quickly gather about 24k tweets. It’s not at all perfect and you should not use it to gather data. It doesn’t even use the since_id param for the search API endpoint.\nimport twitter import json import psycopg2 api = twitter.Twitter(auth=twitter.OAuth(\u0026#39;\u0026#39;, \u0026#39;\u0026#39;, \u0026#39;\u0026#39;, \u0026#39;\u0026#39;)) conn = psycopg2.connect(\u0026#34;dbname=tweets user=bibhas password=forgotit\u0026#34;) cur = conn.cursor() cur.execute(\u0026#39;SELECT text from word\u0026#39;) terms = cur.fetchall() if terms: for t in terms: tweets = api.search.tweets(q=t, lang=\u0026#39;en\u0026#39;, count=100) for s in tweets[\u0026#39;statuses\u0026#39;]: cur.execute(\u0026#34;SELECT * FROM tweet WHERE tid=\u0026#39;%s\u0026#39;\u0026#34;, (s[\u0026#39;id\u0026#39;], )) # ignore the duplicate and RT-like tweets if cur.fetchone() is not None or s[\u0026#39;text\u0026#39;].find(\u0026#39;RT @\u0026#39;) \u0026gt;= 0: continue cur.execute(\u0026#34;INSERT INTO tweet (tid, data) VALUES (%s, %s)\u0026#34;, (s[\u0026#39;id\u0026#39;], json.dumps(s), )) conn.commit() cur.close() conn.close() I ran this script as a cron job for few hours and I had the required data. Now if I query the table, this is what it looks like -\nSo, no schema specific to the tweet’s JSON structure and we got the data in the database. Now let’s try to query the data and see what happens.\nLet’s try to fetch all the tweet texts(I’ll use explain analyze on all the queries for showing the performace) -\ntweets=# explain analyze select tid, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39; from tweet; QUERY PLAN ------------------------------------------------------------------------------------------------------------- Seq Scan on tweet (cost=0.00..4254.06 rows=20325 width=51) (actual time=0.169..458.198 rows=20335 loops=1) Total runtime: 459.121 ms For reference, -\u0026gt; returns a JSON object and -\u0026gt;\u0026gt; returns text. Check the JSON data type reference url above for more details. Now, let’s try a WHERE clause on a JSON property -\ntweets=# explain analyze select tid, data#\u0026gt;\u0026gt;\u0026#39;{user,screen_name}\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39; from tweet where data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39; like \u0026#39;%world cup%\u0026#39;; QUERY PLAN -------------------------------------------------------------------------------------------------------- Seq Scan on tweet (cost=0.00..4384.70 rows=2 width=51) (actual time=10.700..481.758 rows=510 loops=1) Filter: ((data -\u0026gt;\u0026gt; \u0026#39;text\u0026#39;::text) ~~ \u0026#39;%world cup%\u0026#39;::text) Rows Removed by Filter: 20202 Total runtime: 481.825 ms (4 rows) and if I try case insensitive matching -\ntweets=# explain analyze select tid, data#\u0026gt;\u0026gt;\u0026#39;{user,screen_name}\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39; from tweet where UPPER(data-\u0026gt;\u0026gt;\u0026#39;text\u0026#39;) like UPPER(\u0026#39;%world cup%\u0026#39;); QUERY PLAN -------------------------------------------------------------------------------------------------------- Seq Scan on tweet (cost=0.00..4436.49 rows=2 width=51) (actual time=7.983..642.647 rows=3563 loops=1) Filter: (upper((data -\u0026gt;\u0026gt; \u0026#39;text\u0026#39;::text)) ~~ \u0026#39;%WORLD CUP%\u0026#39;::text) Rows Removed by Filter: 17149 Total runtime: 642.887 ms (4 rows) Now let’s try to find all the useful tweets, those that have been favorited more than, let’s say 5 times -\ntweets=# explain analyze select tid, data#\u0026gt;\u0026gt;\u0026#39;{user,screen_name}\u0026#39;, data-\u0026gt;\u0026gt;\u0026#39;favorite_count\u0026#39; from tweet where …","date":1402473540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1402473540,"objectID":"af47b0bdccb00a73c28dbed19d2ebf38","permalink":"https://bibhasdn.com/blog/postgresql-swag-json-data-type-and-working-with-twitter-data/","publishdate":"2014-06-11T07:59:00Z","relpermalink":"/blog/postgresql-swag-json-data-type-and-working-with-twitter-data/","section":"posts","summary":"When working on side projects that deal with 3rd party data, how much time do you spend on figuring out the database schema? Not an insignificant amount. You don’t use a DBMS you say? Good luck parsing the data files and querying them.\nI’m not going to start a DBMS comparison. I’ve spent a lot of time fiddling with structred data and PostgreSQL has been really kind to me. It’s stable, really feaure rich and it can literally do anything. You want to setup a cluster? Replication? Crunch geo spatial data? parse Gigabytes of CSV files? And want to do all of these really fast? Then PostgreSQL is for you, it can do all that and more out of the box. Just today a friend told me that PostgreSQL parsed and imported his 4.3GB CSV file in under 10 minutes. I’m happy with that performance.\n","tags":[],"title":"PostgreSQL SWAG: JSON data type and working with Twitter data","type":"posts"},{"authors":null,"categories":null,"content":"Holi as a festival kind of sucks for me. I guess that’s mostly because I don’t like the idea of having fun while bathing in artifical colors. So, I have to stay home for at least 3 days when everybody is “spreading the joy” outside. And if I go outside, they will share their “joy” with me too regardless of if I want to be a part of it or not. And they are not very considerate either. We Indians are really strict about that.\nBut this time Holi is actually being awesome because four of us friends are staying inside with our computers. Wherever I look there is code, computer, boxes of foods that have been eaten, camera, bean bag and lot of concentration. I’m trying to become a bit less Indian about it and not forcing others to do the same. Wish you all(well, maybe not all) a Happy Holi.\n","date":1394956740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1394956740,"objectID":"4a331e90f4a3835c6cf56f9aad5e3737","permalink":"https://bibhasdn.com/blog/the-festival-of-colors-holi-and-me/","publishdate":"2014-03-16T07:59:00Z","relpermalink":"/blog/the-festival-of-colors-holi-and-me/","section":"posts","summary":"Holi as a festival kind of sucks for me. I guess that’s mostly because I don’t like the idea of having fun while bathing in artifical colors. So, I have to stay home for at least 3 days when everybody is “spreading the joy” outside. And if I go outside, they will share their “joy” with me too regardless of if I want to be a part of it or not. And they are not very considerate either. We Indians are really strict about that.\n","tags":[],"title":"The festival of colors, Holi and me","type":"posts"},{"authors":null,"categories":null,"content":"This year, the bookfair is happening at Milam Mela ground beside Science city like the last year. Here is the map of Kolkata Book Fair 2014 for your use -\nSome more images are in my Flickr gallery.\nIf you’re new to Kolkata, here is the location of the book fair - OpenStreetMap | Google Maps\nGo visit today. Buy some books. :)\n","date":1391241540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1391241540,"objectID":"61e632aa0f62135bcd6a37e4ab70d629","permalink":"https://bibhasdn.com/blog/map-of-kolkata-book-fair-2014/","publishdate":"2014-02-01T07:59:00Z","relpermalink":"/blog/map-of-kolkata-book-fair-2014/","section":"posts","summary":"This year, the bookfair is happening at Milam Mela ground beside Science city like the last year. Here is the map of Kolkata Book Fair 2014 for your use -\nSome more images are in my Flickr gallery.\nIf you’re new to Kolkata, here is the location of the book fair - OpenStreetMap | Google Maps\nGo visit today. Buy some books. :)\n","tags":["kolkata","bookfair","map"],"title":"Map of Kolkata Book Fair 2014","type":"posts"},{"authors":null,"categories":null,"content":"And just like that, PyCon India 2013 is over. A lot of hard work and dedications comes to an end for another year. Yet extremely happy because all those hard works yielded really awesome feedback. People have enjoyed those 3 days. That’s all we needed to make sure would happen. :)\nI reached B’lore on 28th, changed from the original plan of going on 29th. I thought it’d better to reach with two days of time in hand so that I can help prepare for the event.\nOn 29th evening, went to CIS to help pack the equipments to bring to the event venue. Did some good amount of counting and packing. Then got a car and brought everything to the venue and started preparing for the next day. Unlike the last time, this year we had a lot of volunteers on the day before the event to help us with the preparation. And that really helped.\n#pyconindia2013 started pic.twitter.com/7lTXJaydG6\n— kushaldas (@kushaldas) August 30, 2013 On 30th morning, I had to go to HasGeek’s workshop office to pick up few more equipments, that made me late to reach the venue. By the time I was there, the registration had already started. I, along with Iliyas and Haseeb, had to take care of setting up the registration and sponsor booth systems. Whole day went testing and setting the systems up. And the first day went smoothly. Participants liked the workshops. I couldn’t attend any of them. At the end of the day, we needed one of the Asus Eee PCs to be configured so that it can be used for registration the next day, so brought it home with me. Installed Ubuntu and learned that Unity does not play well on netbooks. So install gnome-classic. Then it started working smoothly.\nOn 31st morning, it was raining well, that caused some good amount of traffic jam on road and I guess thanks to that there was not much crowd on the registration desk. There were a lot of running around to get registration kits from inventory to the registration desk. And it was done well enough to not have a huge queue waiting to be registered. We had about 1000 registered participants. The registration was done really smoothly even despite that. That went really well.\nRegistration complete. Nice spell of rain. Now in auditorium 1 for @jackerhack\u0026#39;s keynote at #pyconindia2013\n— sankarshan সঙ্কর্ষণ (@sankarshan) August 31, 2013 Registration started for main conference #pyconindia2013 pic.twitter.com/rrnmC1QoZh\n— kushaldas (@kushaldas) August 31, 2013 In the meantime, the food was arranged and it got some really good feedback from participants. In all that mess, missed the keynote by @jackerhack on paradox of code. :( Anyway, watched it right after the video was uploaded on Youtube. Good one. :)\nKeynote at #pyconindia2013 by @jackerhack. http://t.co/84eCC2pO0j\n— Rishi Mukherjee (@RishiMukherjee2) August 31, 2013 From morning keynote #pyconindia2013 pic.twitter.com/MAzH5Oxs6q\n— kushaldas (@kushaldas) August 31, 2013 PyCon, event where even mic is tested speaking \u0026#39;hello world\u0026#39;.\n#PyConIndia2013\n— Gautam Singh (@CrypticSham9) August 31, 2013 Then we had to start running to sponsor booths to set up the Contact point system. It in a software developed by team @hasgeek(mostly) for making it possible to exchange contacts betweek event participants and sponsors without much hassles. Although, there were some glitches here and there, the systems worked. Had to hunt down rogue WiFi access points running around the venue. That was fun. And the lunch was great. Met a lot of old friends from last and last last PyCons. Some of them, like @bhauvrat were wearing the PyCon 2011 t-shirt. Sadly I’ve outgrown that t-shirt. Still cherish it though.\n#pyconindia2013 keeps getting awesome. The response is awesome, the talks are awesome !!! \u0026lt;3\n— Konark Modi (@konarkmodi) August 31, 2013 So who were the volunteers for catering? This is the best food in @pyconindia yet! #pyconindia2013\n— Abdul Muneer (@abdulmuneer) September 1, 2013 The second day went great. Konark did a great job managing the volunteers. Althought there were few rough spots. Some of them could not be found throughout the event. But we took on the tasks and completed it. Tried to make sure that the participants don’t face any trouble. From the tweets I saw, it seemed we succeeded. :)\nKeynote by @kennethreitz has just begun: http://t.co/q6AjRwNJDV #pyconindia #pyconindia2013\n— Harshad Sharma (@hiway) September 1, 2013 The third day started slow. As most of the participants registered the day before, the rush was less, so I got to attend the keynote on second day by @kennethreitz. He shared his experience on running an open source project. Some good lessons. Maybe I can use them someday.\n\u0026#34;documentation is the glue that makes Open Source possible\u0026#34; #pyconindia2013\n— sankarshan সঙ্কর্ষণ (@sankarshan) September 1, 2013 Learn to say no to crazy features: \u0026#34;Simplicity is better than functionality\u0026#34; - Pieter Hinjesns.\n\n@kennethreitz at #PyconIndia2013\n— Arnab Deka (@arnab_deka) September 1, 2013 Almost around the lunch time we wrapped up the registration …","date":1378627140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1378627140,"objectID":"ebeda18475a7c899a40b7d583ff8ba39","permalink":"https://bibhasdn.com/blog/moments-from-pycon-india-2013/","publishdate":"2013-09-08T07:59:00Z","relpermalink":"/blog/moments-from-pycon-india-2013/","section":"posts","summary":"And just like that, PyCon India 2013 is over. A lot of hard work and dedications comes to an end for another year. Yet extremely happy because all those hard works yielded really awesome feedback. People have enjoyed those 3 days. That’s all we needed to make sure would happen. :)\nI reached B’lore on 28th, changed from the original plan of going on 29th. I thought it’d better to reach with two days of time in hand so that I can help prepare for the event.\n","tags":["pyconindia2013"],"title":"Moments from PyCon India 2013","type":"posts"},{"authors":null,"categories":null,"content":"This August has been special for all the Python lovers in India for it’s being celebrated as “Python Month” by PyCon India. Volunteers all around the country have been visiting colleges and organizing workshops to promote and spread the awesomeness of Python. There has been few workshops in West Bengal as well. I attended and helped organize two of them. One at the B.P.Poddar Institute of Management and Technology and Netaji Subhash Engineering College.\nThe workshop at BPPIMT was organized by CampusHash. Sanket and Rohit, who run CampusHash, has been kind enough to extend their support in organizing workshops around the country. The college management was really helpful, and the number of attendees were good.\nIn the other hand, NSEC had a very concentrated crowd. We had to organize it in a rush, so we had to do it small. We took a small computer lab so that everyone could try out things that were being discussed. The volunteers Debjeet, Sneha, Nilabhra, Puja and others from that college were really helpful and the workshop was a success. :)\nThere has been more workshops in West Bengal. CampusHash organized two more workshops at Heritage Institute of Technology and Institute of Engineering and Management. And some students from B.C.Roy Engineering College, Durgapur organized another workshop there.\nThis is just the start. PyCon is next week. After that we’ll have more of these coming to Kolkata. :)\n","date":1377417540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1377417540,"objectID":"ebf11f09ea290263d331b04212d63b8e","permalink":"https://bibhasdn.com/blog/python-month-workshop-at-bppimt-kolkata/","publishdate":"2013-08-25T07:59:00Z","relpermalink":"/blog/python-month-workshop-at-bppimt-kolkata/","section":"posts","summary":"This August has been special for all the Python lovers in India for it’s being celebrated as “Python Month” by PyCon India. Volunteers all around the country have been visiting colleges and organizing workshops to promote and spread the awesomeness of Python. There has been few workshops in West Bengal as well. I attended and helped organize two of them. One at the B.P.Poddar Institute of Management and Technology and Netaji Subhash Engineering College.\n","tags":["python"],"title":"Python Month workshop at BPPIMT, Kolkata and NSEC, Kolkata","type":"posts"},{"authors":null,"categories":null,"content":" What is Tornado? From the documentation itself -\nTornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long polling, WebSockets, and other applications that require a long-lived connection to each user.\nIt’s basically a minimalistic web framework which supports non-blocking network operations. If you go through the list of modules it supports, you’ll see that it has a lot of modules built in. But there is no proper tutorial of how to achieve most of the things. All the reference to the API is there though. So you must go ahead, read the API and figure out things yourself.\nAnyway, I’m not going to write about what is good or bad about it. This post is about how you can replace Tornado’s default template engine with Jinja2.\nWhat is Jinja2? Jinja2 is a modern and designer friendly templating language for Python, modelled after Django’s templates. It is fast, widely used and secure with the optional sandboxed template execution environment:\nTornado’s native template engine is good and really light-weight. But at the same time it lacks few features I wanted, which Jinja2 has. So I decided to replate tornado’s template engine with Jinja2.\nTo do this, you need to write a base handler which all the other handlers will inherit from. This is what I wrote -\nimport os import tornado.web from jinja2 import Environment, FileSystemLoader, TemplateNotFound class TemplateRendering: \u0026#34;\u0026#34;\u0026#34; A simple class to hold methods for rendering templates. \u0026#34;\u0026#34;\u0026#34; def render_template(self, template_name, **kwargs): template_dirs = [] if self.settings.get(\u0026#39;template_path\u0026#39;, \u0026#39;\u0026#39;): template_dirs.append( self.settings[\u0026#34;template_path\u0026#34;] ) env = Environment(loader=FileSystemLoader(template_dirs)) try: template = env.get_template(template_name) except TemplateNotFound: raise TemplateNotFound(template_name) content = template.render(kwargs) return content class BaseHandler(tornado.web.RequestHandler, TemplateRendering): \u0026#34;\u0026#34;\u0026#34; RequestHandler already has a `render()` method. I\u0026#39;m writing another method `render2()` and keeping the API almost same. \u0026#34;\u0026#34;\u0026#34; def render2(self, template_name, **kwargs): \u0026#34;\u0026#34;\u0026#34; This is for making some extra context variables available to the template \u0026#34;\u0026#34;\u0026#34; kwargs.update({ \u0026#39;settings\u0026#39;: self.settings, \u0026#39;STATIC_URL\u0026#39;: self.settings.get(\u0026#39;static_url_prefix\u0026#39;, \u0026#39;/static/\u0026#39;), \u0026#39;request\u0026#39;: self.request, \u0026#39;xsrf_token\u0026#39;: self.xsrf_token, \u0026#39;xsrf_form_html\u0026#39;: self.xsrf_form_html, }) content = self.render_template(template_name, **kwargs) self.write(content) Now to use this base handler, you need to make few things sure that your application settings should have a template_path key pointing to the absolute path of the directory holding all the templates.\nNow you can inherit this base handler and use jinja2 by default -\nclass RegisterHandler(BaseHandler): def get(self, **kwargs): data = { \u0026#39;foo\u0026#39;: \u0026#39;bar\u0026#39; } return self.render2(\u0026#39;auth/register.html\u0026#39;, **data) def post(self, **kwargs): self.check_xsrf_cookie() pass Now you can use the foo variable as {{ \u0026#34;{{ foo \u0026#34; }}}} in your jinja2 template.\nNote: I took some help from this blog post.\n","date":1374566340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1374566340,"objectID":"00d1cc450d08b2f2f9ae3e3d242e5614","permalink":"https://bibhasdn.com/blog/using-jinja2-as-the-template-engine-for-tornado-web-framework/","publishdate":"2013-07-23T07:59:00Z","relpermalink":"/blog/using-jinja2-as-the-template-engine-for-tornado-web-framework/","section":"posts","summary":" What is Tornado? From the documentation itself -\nTornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long polling, WebSockets, and other applications that require a long-lived connection to each user.\nIt’s basically a minimalistic web framework which supports non-blocking network operations. If you go through the list of modules it supports, you’ll see that it has a lot of modules built in. But there is no proper tutorial of how to achieve most of the things. All the reference to the API is there though. So you must go ahead, read the API and figure out things yourself.\n","tags":["tornado","jinja2"],"title":"Using Jinja2 as the Template Engine for Tornado Web Framework","type":"posts"},{"authors":null,"categories":null,"content":"Just wrote this to someone -\nI closed all the other tabs and started working on it, you can’t ask for more focus than that from me.\n","date":1370419140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1370419140,"objectID":"e7fa1646aa1074fa6ddab066efb47e60","permalink":"https://bibhasdn.com/blog/focus/","publishdate":"2013-06-05T07:59:00Z","relpermalink":"/blog/focus/","section":"posts","summary":"Just wrote this to someone -\nI closed all the other tabs and started working on it, you can’t ask for more focus than that from me.\n","tags":[],"title":"Focus..","type":"posts"},{"authors":null,"categories":null,"content":"Why #1? Because there is going to be #2 and maybe more. Most probably not in near future, but someday.\nGist is, I’m heading back to Kolkata for now. Consider this post as a commit message to my life, for the changes in last few months.\nFirst two months here were the worst. The entrepreneur who hired me and convinced me to move here, betting a lot of savings of my parents, kept me sitting idle for a month and a half, and then declared that his idea isn’t working so he’s going after another idea and abandoning ship, without paying me or the my friend who was also on the same boat. That’s two months of no income for me. Of course I couldn’t tell my parents anything. They were already depending a lot on me and their health isn’t that good either. Hence I had to borrow money from some friends and manage somehow. And I’m still under a lot of debt. Thanks Mr Entrepreneur. You’re a real hero.\nBecause of my parents’ ill health and some more reasons, I had to visit Kolkata multiple times in last few months. And it had good travel costs. So actually, all my earnings in last few months, after paying rent and food cost, were spent on repaying debts. And I’ll still have to do that for next couple of months. I’m saving almost nothing staying here and also spending about 15k each month in living cost, which I could, maybe, save, if I were in Kolkata.\nAll thanks to a friend, who appeared as an angel and gave me another opportunity at LxiDD, I was able to recover most part of the crisis. I’ll be forever grateful to him.\nThe city is great. The thing I liked most here, and which I also miss in Kolkata is that, people here are always active. They are talking, coming up with ideas, and, most importantly, executing those ideas no matter what. And I’ve made some really great friends among these people. I’ve learned so many things. This is a nice city to live in too. Maybe someday..\nStill I decided to give up my job here and move because my parents need me right now. And swinging between two cities, is helping neither party much.\nOne other major reason is, I’m not liking this long distance relationship thing. We’ve been together for just about a year and a half now. And I’m already running around, away from her. She’s been more supportive that I’ve ever imagined. She’s one of the most strong willed girl I’ve met. But I am weak. I simply cannot stay away from her. I know you must be smirking. I really don’t care.\nI know I shouldn’t leave my job like this. Well, I don’t want to. I’m willing to work remotely. But as it happens, my startup is not really ready to accept remote work. I’ll still be freelancing with them I guess. But I really don’t want to stop working with them. LxiDD and Kamelot Kapital is the best place I’ve worked till now. The people are so nice and friendly, and there are huge scopes of learning new things here. Someday I want to come back to Bangalore again. And I’m gonna check if they have any place for me. Well, my skills are not gonna get rusty, that I’m sure of. So, let’s see. :P For now, I’d recomment any of my friends to join Kamelot Kapital/LxiDD if they can. Well, with me going out, they have a vacancy right now. If you’re up for it, just shoot a mail to jobs@lxidd.com.\nI also know that I shouldn’t take my career so lightly. But I have always did things the way I felt were right. Well, most of the decisions till now turned out to be bad decisions, and they had their prices too. But the way I see it, in exchange of all the bad times, I always get something good back. So, I’m going to do it again this time. Let’s see what happens.\n","date":1369382340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1369382340,"objectID":"bb15a2786e0277a2a57714775cf7691d","permalink":"https://bibhasdn.com/blog/my-bangalore-story-1/","publishdate":"2013-05-24T07:59:00Z","relpermalink":"/blog/my-bangalore-story-1/","section":"posts","summary":"Why #1? Because there is going to be #2 and maybe more. Most probably not in near future, but someday.\nGist is, I’m heading back to Kolkata for now. Consider this post as a commit message to my life, for the changes in last few months.\nFirst two months here were the worst. The entrepreneur who hired me and convinced me to move here, betting a lot of savings of my parents, kept me sitting idle for a month and a half, and then declared that his idea isn’t working so he’s going after another idea and abandoning ship, without paying me or the my friend who was also on the same boat. That’s two months of no income for me. Of course I couldn’t tell my parents anything. They were already depending a lot on me and their health isn’t that good either. Hence I had to borrow money from some friends and manage somehow. And I’m still under a lot of debt. Thanks Mr Entrepreneur. You’re a real hero.\n","tags":[],"title":"My Bangalore Story #1","type":"posts"},{"authors":null,"categories":null,"content":"If you’re here from some search engine, that means you’ve been working with Tornado and WTForms, and you’ve faced the same error -\n(Pdb) form = SomeForm(self.request.arguments) *** TypeError: formdata should be a multidict-type wrapper that supports the \u0026#39;getlist\u0026#39; method The thing is, Tornado does provide a dictionary that contains the data like a MultiDict should do for GET/POST/others request arguments -\n{\u0026#39;_xsrf\u0026#39;: [\u0026#39;b2c0d0bebbf84516a8aa0462bb41ea0f\u0026#39;], \u0026#39;password\u0026#39;: [\u0026#39;password\u0026#39;], \u0026#39;email\u0026#39;: [\u0026#39;mail@gmail.com\u0026#39;]} But it sends it as a dictionary -\n(Pdb) type(self.request.arguments) \u0026lt;type \u0026#39;dict\u0026#39;\u0026gt; And Python dictionaries don’t have a getlist() method. And WTForms requires the arguments object to have that method.\nWorkaround?\nclass SimpleMultiDict(dict): def getlist(self, key): return self[key] def __repr__(self): return type(self).__name__ + \u0026#39;(\u0026#39; + dict.__repr__(self) + \u0026#39;)\u0026#39; This simply makes a subclass of dict and adds the getlist() method. So, What did we gain?\n(Pdb) SimpleMultiDict(self.request.arguments) SimpleMultiDict({\u0026#39;_xsrf\u0026#39;: [\u0026#39;b2c0d0bebbf84516a8aa0462bb41ea0f\u0026#39;], \u0026#39;password\u0026#39;: [\u0026#39;password\u0026#39;], \u0026#39;email\u0026#39;: [\u0026#39;mail@gmail.com\u0026#39;]}) (Pdb) arguments = SimpleMultiDict(self.request.arguments) (Pdb) dir(arguments) [\u0026#39;__class__\u0026#39;, (skipping some default methods) , \u0026#39;clear\u0026#39;, \u0026#39;copy\u0026#39;, \u0026#39;fromkeys\u0026#39;, \u0026#39;get\u0026#39;, \u0026#39;getlist\u0026#39;, \u0026#39;has_key\u0026#39;, \u0026#39;items\u0026#39;, \u0026#39;iteritems\u0026#39;, \u0026#39;iterkeys\u0026#39;, \u0026#39;itervalues\u0026#39;, \u0026#39;keys\u0026#39;, \u0026#39;pop\u0026#39;, \u0026#39;popitem\u0026#39;, \u0026#39;setdefault\u0026#39;, \u0026#39;update\u0026#39;, \u0026#39;values\u0026#39;, \u0026#39;viewitems\u0026#39;, \u0026#39;viewkeys\u0026#39;, \u0026#39;viewvalues\u0026#39;] # Notice the getlist() method (Pdb) arguments.getlist(\u0026#39;email\u0026#39;) [\u0026#39;mail@gmail.com\u0026#39;] (Pdb) form = LoginForm(arguments) (Pdb) form.email.data \u0026#39;mail@gmail.com\u0026#39; Now there is a point to note here. Tornado sends the arguments data in a simple dictionary that has each of the values inside a list. Here is a pointer if you’re using some framework that sends a simple dictionary, with the arguments not in list, and that also doesn’t have a getlist() method, just change the getlist() method to this -\nclass SimpleMultiDict(dict): def getlist(self, key): return self[key] if type(self[key]) == list else [self[key]] def __repr__(self): return type(self).__name__ + \u0026#39;(\u0026#39; + dict.__repr__(self) + \u0026#39;)\u0026#39; This just turns the simgle values to a list, just what getlist() is supposed to do.\n","date":1366876740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1366876740,"objectID":"1242a3144315c7b4b56d8cd99135a1ad","permalink":"https://bibhasdn.com/blog/tornado-wtforms-typeerror-formdata-should-be-a-multidict-type-wrapper/","publishdate":"2013-04-25T07:59:00Z","relpermalink":"/blog/tornado-wtforms-typeerror-formdata-should-be-a-multidict-type-wrapper/","section":"posts","summary":"If you’re here from some search engine, that means you’ve been working with Tornado and WTForms, and you’ve faced the same error -\n(Pdb) form = SomeForm(self.request.arguments) *** TypeError: formdata should be a multidict-type wrapper that supports the 'getlist' method The thing is, Tornado does provide a dictionary that contains the data like a MultiDict should do for GET/POST/others request arguments -\n{'_xsrf': ['b2c0d0bebbf84516a8aa0462bb41ea0f'], 'password': ['password'], 'email': ['mail@gmail.com']} But it sends it as a dictionary -\n","tags":[],"title":"Tornado + WTForms = TypeError: formdata should be a multidict type wrapper ...","type":"posts"},{"authors":null,"categories":null,"content":" I’ve been here before I’ll be back for more Maybe this time I can stay Forever more, forever more\nWonder what the future brings Fortune tellers and time machines I predict what they’ll predict for me That I keep coming back to you.\n","date":1366790340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1366790340,"objectID":"83cb9c8febfe8552079eb225bd7d39c6","permalink":"https://bibhasdn.com/blog/to-keep-coming-back/","publishdate":"2013-04-24T07:59:00Z","relpermalink":"/blog/to-keep-coming-back/","section":"posts","summary":" I’ve been here before I’ll be back for more Maybe this time I can stay Forever more, forever more\nWonder what the future brings Fortune tellers and time machines I predict what they’ll predict for me That I keep coming back to you.\n","tags":[],"title":"To Keep Coming Back","type":"posts"},{"authors":null,"categories":null,"content":"I’ve been working on Tornado for last few days and I really needed a shell access to the local virtual environment of my Tornado app so that I can test few things out. Exactly like Django has ./manage.py shell. But as we all know Tornado lacks a good documentation. Most of the things except the use of the native classes, require a lot of trial and error(at least for me, I’m not so bright). So I looked around and found how Flask has a way of having an interactive shell access to the environment. And I just replicated it.\nCreate a file called shell.py(or whatever you like) on the root of your project and put these codes in it -\n#!/usr/bin/env python import os import readline from pprint import pprint # Your app file from app import * # These project specific. But I need these to run my project from config import * from settings import * # This is the main part os.environ[\u0026#39;PYTHONINSPECT\u0026#39;] = \u0026#39;True\u0026#39; From Python documentation -\nPYTHONINSPECT If this is set to a non-empty string it is equivalent to specifying the -i option. This variable can also be modified by Python code using os.environ to force inspect mode on program termination.\nAnd the -i option -\n-i When a script is passed as first argument or the -c option is used, enter interactive mode after executing the script or the command, even when sys.stdin does not appear to be a terminal. The PYTHONSTARTUP file is not read. This can be useful to inspect global variables or a stack trace when a script raises an exception.\nNow just navigate to your project root and execute python shell.py or you can do ./shell.py if you know how. This will take you to an interactive shell where you can play around with your project.\n","date":1366531140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1366531140,"objectID":"df71c503692d03006da1cd2e185719cc","permalink":"https://bibhasdn.com/blog/interactive-shell-access-to-tornado-local-environment/","publishdate":"2013-04-21T07:59:00Z","relpermalink":"/blog/interactive-shell-access-to-tornado-local-environment/","section":"posts","summary":"I’ve been working on Tornado for last few days and I really needed a shell access to the local virtual environment of my Tornado app so that I can test few things out. Exactly like Django has ./manage.py shell. But as we all know Tornado lacks a good documentation. Most of the things except the use of the native classes, require a lot of trial and error(at least for me, I’m not so bright). So I looked around and found how Flask has a way of having an interactive shell access to the environment. And I just replicated it.\n","tags":[],"title":"Interactive Shell Access to Tornado Local Environment","type":"posts"},{"authors":null,"categories":null,"content":"I’d have really regretted if I hadn’t come home for the Bengali New Year. This is one of those days when you get to see Bongs showing off their Bong-ness. I mean if you visit the City Center you’ll see that they have stalls and frying fish in bengali recipes. Girls and Ladies are wearing Sharees, guys are wearing Panjabi. Singing and playing Bengali songs loudly in every locality. People would behave more lethargic than Ever. So on and so forth ..\nAmong all of these things, I got to see a glimpse of the True bong spirit today. A cute sister of mine is a student at Arena Multimedia. And Arena celebrates Bengali new year with a small function among the students, teachers and staffs. Outsiders are usually not told about this, but my sis got me, her elder sister and her brother to attend it becasue, for the first time, she was going to dance in a function. And we 3 being her most favorite people, were invited to watch it. That’s another major reason I came to Kolkata this time. I just couldn’t miss this.\nSo they sang. Rabindranath, Jibanananda, bangla band, Anjan Datta; they left nothing. And they performed really well. There were moments like everyone singing “Bela Bose” together in open voice without any tension, making fun impressions in the process. Or some of them dancing and others cheering them up or just watching quietly. There were moments of reciting self-composed poems. Those are some talented kids.\nAnd there were moments where someone was dancing a break-dance score from a movie called “Student of the year”. I think it released this year. And someone singing a hindi song that had absolutely no relationship with the event. But anyway, was glad to see their efforts.\nOh, I also visited a friend’s office and did some brainstorming. Good start of the bengali year overall. Hope this year goes well for you people reading this blog post too. Shubho Nababarsha. শুভ নববর্ষ।\n","date":1366012740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1366012740,"objectID":"3326d3d7c31fe1601d5df074f82111cf","permalink":"https://bibhasdn.com/blog/shubho-nababarsha-1420/","publishdate":"2013-04-15T07:59:00Z","relpermalink":"/blog/shubho-nababarsha-1420/","section":"posts","summary":"I’d have really regretted if I hadn’t come home for the Bengali New Year. This is one of those days when you get to see Bongs showing off their Bong-ness. I mean if you visit the City Center you’ll see that they have stalls and frying fish in bengali recipes. Girls and Ladies are wearing Sharees, guys are wearing Panjabi. Singing and playing Bengali songs loudly in every locality. People would behave more lethargic than Ever. So on and so forth ..\n","tags":[],"title":"Shubho Nababarsha, 1420","type":"posts"},{"authors":null,"categories":null,"content":"From 20,000 feet above ground, when you look down, you can actually see and feel how insignificantly small we are compared to this vast planet. We’re like ants on the ground. Trying to survive, trying to ignore this fact.\n","date":1365926340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1365926340,"objectID":"eefa56587e0dccb4b6521c6da3ae40cb","permalink":"https://bibhasdn.com/blog/from-20000-feet-above-ground-/","publishdate":"2013-04-14T07:59:00Z","relpermalink":"/blog/from-20000-feet-above-ground-/","section":"posts","summary":"From 20,000 feet above ground, when you look down, you can actually see and feel how insignificantly small we are compared to this vast planet. We’re like ants on the ground. Trying to survive, trying to ignore this fact.\n","tags":[],"title":"From 20,000 feet above ground ..","type":"posts"},{"authors":null,"categories":null,"content":"Got tired of wordpress and PHP. So moving my site to Github pages.\n","date":1360655940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1360655940,"objectID":"b1416d6f526ac4e974bdff451a920b56","permalink":"https://bibhasdn.com/posts/2013-02-12-moving-to-jekyll/","publishdate":"2013-02-12T07:59:00Z","relpermalink":"/posts/2013-02-12-moving-to-jekyll/","section":"posts","summary":"Got tired of wordpress and PHP. So moving my site to Github pages.\n","tags":["Non-technical"],"title":"Moving to Jekyll and Github","type":"post"},{"authors":null,"categories":null,"content":"Incident 1 (I’m in college, 1st year): The head of the dept. walks into our class, and throws us a question, “Where do you see yourself in 10 years?”. Honestly, I took that question a bit seriously, and that was the first time I realized that I didn’t know what I should be in future. I didn’t start as a developer then. Didn’t even know I’m going to be what I am today. I was asked “What is your aim in life?” several times in my college days, I remember clearly that I answered differently every single time.\nIncident 2 (1 year after I’ve started freelancing, 4th year of college): Few of my co-workers were already in their 3rd-4th startup, and were talking about what they want to do next(start up again if that one fails) and I was thrown the question, “Bibhas, what are you going to do after college, and after couple of years?”. I couldn’t answer. I knew I will be working somewhere, developing something, but didn’t know on what role, doing what.\nIncident 3 (I left the first job because I didn’t like it): And I’m thinking what to do next. Then it strikes me, I still didn’t know what I want to be in life. I have ideas about how to build softwares, I want to keep doing it. But I also have a feeling that writing code takes a lot of time. It’d be nice if I had few colleagues writing codes. I was pretty sure this is going to be a deciding factor later in my life. But I still don’t see the sign.\nIncident 4 (a week back): I was talking to a colleague. He’s seen his share of startup lives. We were talking about few of my friends who don’t want to take risks working in startups and keep working at MNCs because those jobs are “safe”. Then he says, “They should realize, are they living a life which they can tell their kids about?”. I laughed in my head, thinking of a friend of mine telling his kid, “You know? I used to work at an MNC. I used to go to office every freaging day at 9am and return at 10pm. I had a wonderful life.” Don’t know about you, but that seemed effin hilarious to me. But then I thought they might not realize it and think that they are too young to start “taking risks”.\nIncident 5 (Present day): I come across this question in Quora: “What do you regret not doing in your 20s?\nIt has few answers from people of 30s, sharing their views. I’d like to quote some of them here.\nThe only thing I regret in my 20’s is not taking more risks. I took a ton of risks in my 20’s from what I studied in school to where I lived to who I wanted to be. In the end, I could have been more fearless and more courageous to be exactly who I wanted to be, no matter what. The only advice I can offer: Do not listen to anyone else when you make big life decisions. No one knows you like you. When you make a big decision, do not listen to your parents, your siblings, your friends, or anyone else. It sounds absurd, but when I look back on my 20’s the best decisions I made were ones I made myself that were protested by everyone around me. When you can stand truly on your own to make the correct choice while everyone around you is telling you that you’re wrong, you’re doing it right.\nIt’s not regret. But looking back, it seems my life would have been better if I had done / had known these earlier:\nOn love: Leave an unhappy relationship. It’s not about commitment. It’s about how to respect yourself.\nOn work: Quit an unhappy job. The feeling of being caged, deprived of the opportunity to learn new things simply because of your role - are not compensated by pay or even gratification of supporting your loved ones.\nOn emotion: Appreciate, listen to, even indulge in emotions sometimes. It keeps a human life. No worries, we’re rational enough. Our brain is amazing.\nOn body: Have happy (safe) sex more and earlier. Play fun sports more and earlier. Feeling a cramp in my leg once saved me from depression due to overthinking.\nOn money: More is not better. There’s a threshold over which you feel secured and free to pursue your dreams. Work constantly to lower this threshold. It frees you from constraints that you set for yourself.\nOn desire/passion: It’s OK that desire/passion changes over time. Someday the dots can be linked. Before that, follow the passion even as it takes leaps and seems without focus.\nOn fear: Never act/decide out of fear. You’re doomed. Lying is an example.\nOn people: Stay around those you want to become. If your network is not given, create it yourself.\nOn human life: You can change your life. Be kind, be honest (to others and to yourself), be grateful. Genuine happiness triumphs.\nNot taking more risks: Your 20s aren’t like your 30s. You can afford to take more chances, try more things, take more risks to find out who you are and where you want to be.\nNot taking more action: I thought that navel-gazing would lead me to answers to the existential angst which bugged me during my 20s. Wrong. Acting and trying new things is the way to answers.\nNot sleeping around more: In your 30s, you and the people you meet are looking for long-term …","date":1353657540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1353657540,"objectID":"c3d6dcb7c8761471c2b4baa08f919947","permalink":"https://bibhasdn.com/posts/2012-11-23-10-years-from-now/","publishdate":"2012-11-23T07:59:00Z","relpermalink":"/posts/2012-11-23-10-years-from-now/","section":"posts","summary":"Incident 1 (I’m in college, 1st year): The head of the dept. walks into our class, and throws us a question, “Where do you see yourself in 10 years?”. Honestly, I took that question a bit seriously, and that was the first time I realized that I didn’t know what I should be in future. I didn’t start as a developer then. Didn’t even know I’m going to be what I am today. I was asked “What is your aim in life?” several times in my college days, I remember clearly that I answered differently every single time.\n","tags":["life"],"title":"Where Do I See Myself in 10 Years?","type":"posts"},{"authors":null,"categories":null,"content":"I had a quick visit to the venue today. As I’m volunteering this time, will be visiting tomorrow too, to help set up everything including the directions. So I thought, it’s better if I just let you know of the location of the venue.\nIt’s just beside Christ College bus stoppage. For those who don’t know, here is the general location of the Christ college stoppage and the venue -\n[caption id=\u0026#34;\u0026#34; align=“aligncenter” width=“615”] PyCon 2012 Venue[/caption]\nOnce you get to the Christ College stoppage, follow this path -\n[caption id=\u0026#34;\u0026#34; align=“aligncenter” width=“610”] PyCon 2012 closer map[/caption]\nAnd you’ll find yourself at the venue. :)\nJust for reference, here is the co-ordinates of the venue - 12.9349, 77.6052(Clickable).\nSee you at the venue. :)\n","date":1348646340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1348646340,"objectID":"4678619c46c1358cb5eba993b684fc79","permalink":"https://bibhasdn.com/posts/2012-09-26-how-to-reach-pycon-india-2012/","publishdate":"2012-09-26T07:59:00Z","relpermalink":"/posts/2012-09-26-how-to-reach-pycon-india-2012/","section":"posts","summary":"I had a quick visit to the venue today. As I’m volunteering this time, will be visiting tomorrow too, to help set up everything including the directions. So I thought, it’s better if I just let you know of the location of the venue.\nIt’s just beside Christ College bus stoppage. For those who don’t know, here is the general location of the Christ college stoppage and the venue -\n[caption id=\"\" align=“aligncenter” width=“615”] PyCon 2012 Venue[/caption]\n","tags":["2012","india","pycon","pyconindia2012"],"title":"How to Reach PyCon India 2012","type":"posts"},{"authors":null,"categories":null,"content":"The way to bypass the t.co url is only for Twitter Web users. If you\u0026#39;re not using it, If you\u0026#39;re using an app, it wont help you. Since the very moment twitter introduced the automatic link shortening of all the links posted with it\u0026#39;s own t.co shortener, it bothered me. Why? Let me explain. Twitter is using this t.co shortener just to track all the links being shared across it’s site. It can track how many links are being shared and how many of them are clicked. (Technically hat also enables them to know which resources are being more popular among the users. I’m not sure how they are using that data.) But the real trouble is, t.co is just another server on your way to the original url.\nIf you notice carefully, most of the links you share or click nowadays are already shortened. And thanks to services like bit.ly, everyone can make a new link shortener in no time. While these shortened urls do look nice, they just push one node away from your destination node. When you click a shortened url, you are taken to the server where the link shortener is hosted and then redirected to the original destination. So, if it were to take you 100ms to reach your url, it’ll take you some more time than that if you click the shortener url.\nt.co is adding another node above what you already have. So that’s two node you have to be redirected from. For example, take this tweet -\nWhere Have The Users Gone? tcrn.ch/NTr6S8 by @nireyal\n— TechCrunch (@TechCrunch) August 26, 2012 TechCrunch already uses their own url shortener tcrn.ch, as you see. And when they share it on Twitter, it’s being shortened with the t.co url shortener. When you read the tweet, you can see the tcrn.ch url, but if you click it, you’ll see that it’ll take you to a t.co link. That means, it’s an anchor, when the original url is the text and the t.co link is the url. That’s an effin bummer. :|\nSo this is how you have to visit your document now -\nhttp://t.co/acgTzWKR -\u0026gt; http://tcrn.ch/NTr6S8 -\u0026gt; http://techcrunch.com/2012/08/26/where-have-the-users-gone/\nSo I have to go through two server before I can get to my link. That’s really a pain in the arse for me, and should be for you too. Because if anyday the t.co server is slow because of the constant load it serves, you have to wait.\nI effin hate that. So wanted to get my way around it. I inspected the anchor tag of Twitter Web, this is what I got -\n\u0026lt;a href=\u0026#34;http://t.co/acgTzWKR\u0026#34; class=\u0026#34;twitter-timeline-link\u0026#34; target=\u0026#34;_blank\u0026#34; data-expanded-url=\u0026#34;http://tcrn.ch/NTr6S8\u0026#34; title=\u0026#34;http://tcrn.ch/NTr6S8\u0026#34; dir=\u0026#34;ltr\u0026#34; wotsearchprocessed=\u0026#34;true\u0026#34;\u0026gt; \u0026lt;span class=\u0026#34;invisible\u0026#34;\u0026gt;http://\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026#34;js-display-url\u0026#34;\u0026gt;tcrn.ch/NTr6S8\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026#34;invisible\u0026#34;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026#34;tco-ellipsis\u0026#34;\u0026gt; \u0026lt;span class=\u0026#34;invisible\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/span\u0026gt; \u0026lt;/span\u0026gt; \u0026lt;/a\u0026gt; Now if you see closely, twitter stores the original url as the value of data-expanded-url in the anchor tag. That is good for me. I just pushed a simple Javascript code that replaces the value of href property with the value of data-expanded-url’s value. And my work is done.\nHere is the javascript code -\nsi = window.setInterval(clearanchors, 2000); function clearanchors(){ anchors = document.getElementsByTagName(\u0026#39;a\u0026#39;) for(i=0;i\u0026lt;anchors.length;i++){ if(anchors[i].getAttribute(\u0026#39;data-expanded-url\u0026#39;) != null){ anchors[i].setAttribute(\u0026#39;href\u0026#39;, anchors[i].getAttribute(\u0026#39;data-expanded-url\u0026#39;)); } } } Just use any javascript pusher and push this to twitter.com. I personally use Personalized Web. so I created this recipe for it -\nI added it as timed function because or else it wont change the urls Twitter Web loads with ajax.\n","date":1345967940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1345967940,"objectID":"d2a0561ee37c25281fd7bf4e3f4cfcd5","permalink":"https://bibhasdn.com/posts/2012-08-26-why-you-should-be-bothered-about-twitters-t-co-url-shortener-and-a-way-to-bypass-it/","publishdate":"2012-08-26T07:59:00Z","relpermalink":"/posts/2012-08-26-why-you-should-be-bothered-about-twitters-t-co-url-shortener-and-a-way-to-bypass-it/","section":"posts","summary":"The way to bypass the t.co url is only for Twitter Web users. If you're not using it, If you're using an app, it wont help you. Since the very moment twitter introduced the automatic link shortening of all the links posted with it's own t.co shortener, it bothered me. Why? Let me explain.","tags":[],"title":"Why You Should Be Bothered About Twitter's t.co Url Shortener And A Way To Bypass It","type":"posts"},{"authors":null,"categories":null,"content":"These are the guiding principles of Python, but are open to interpretation. A sense of humor is required for their proper interpretation.\nBeautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren\u0026#39;t special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you\u0026#39;re Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it\u0026#39;s a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let\u0026#39;s do more of those! Tim Peters (PEP 20) | Explanation with Examples. Easter Egg: Try - import this\n","date":1345622340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1345622340,"objectID":"5ecd2edde9137245b31953cb7cbcafb8","permalink":"https://bibhasdn.com/posts/2012-08-22-the-zen-of-python/","publishdate":"2012-08-22T07:59:00Z","relpermalink":"/posts/2012-08-22-the-zen-of-python/","section":"posts","summary":"These are the guiding principles of Python, but are open to interpretation. A sense of humor is required for their proper interpretation.\nBeautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! Tim Peters (PEP 20) | Explanation with Examples. Easter Egg: Try - import this\n","tags":["python"],"title":"The Zen of Python","type":"posts"},{"authors":null,"categories":null,"content":"Hey guys, Found them in the web and I just thought these maps would help you during these puja days. :)\n[caption id=\u0026#34;\u0026#34; align=“alignnone” width=“505”] North and Central Kolkata Pujas[/caption]\n[caption id=\u0026#34;\u0026#34; align=“alignnone” width=“501”] South Kolkata Pujas[/caption]\n[caption id=\u0026#34;\u0026#34; align=“alignnone” width=“505”] North and Central Kolkata Pujas[/caption]\nHave a Nice puja this year. :)\n","date":1345276740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1345276740,"objectID":"29ee7ba922f0676450e6a934025cb19e","permalink":"https://bibhasdn.com/posts/2012-08-18-kolkata-road-map-for-durga-puja-2012/","publishdate":"2012-08-18T07:59:00Z","relpermalink":"/posts/2012-08-18-kolkata-road-map-for-durga-puja-2012/","section":"posts","summary":"Hey guys, Found them in the web and I just thought these maps would help you during these puja days. :)\n","tags":["kolkata","map","puja"],"title":"Kolkata Road Map for Durga Puja 2012","type":"posts"},{"authors":null,"categories":null,"content":"Warning: While rooting, unlocking bootloader would wipe all your phone\u0026#39;s data and apps. So Backup before proceeding! Getting straight to the point, here is a step by step guide to rooting an Xperia Neo V MT11i on Ubuntu 11.10.\nSmall note: If you\u0026#39;re running Windows, ignore step 1 and 3 and have the phone\u0026#39;s USB drivers installed properly. Install libusb-dev and libusb-1.0-0-dev. Get Flashtool. Download both 0.8.0.0 and 0.8.6.0 update. Extract both, then copy-paste the files from 0.8.6.0 folder to 0.8.0.0 folder. So that you have the updated version. From terminal, go to the FlashTool directory, and run it - $ ./FlashTool Once FlashTool runs, turn on USB Debugging from the Settings\u0026gt;Applications\u0026gt;Development and Unknown Sources from the Settings\u0026gt;Applications. Connect your phone to USB, Not in Mass Storage Device mode. If it\u0026#39;s connected successfully, you\u0026#39;ll see some logs on the window of Flashtool. If there is any error, ask me. Now you have to check if your phone\u0026#39;s Boot loader is unlocked. To root, the boot loader needs to be unlocked. To check, Dial *#*#7378423#*#* . Then go to -\u0026gt; \u0026#34;Service Info\u0026#34; -\u0026gt; \u0026#34;Configuration\u0026#34;. If there is: Bootloader unlock allowed - Yes \u0026lt;\u0026lt; this means that your Bootloader is Locked Bootloader Unlocked - Yes \u0026lt;\u0026lt; this means that your bootloader is unlocked If BL is locked, from Flashtool, go to Plugins \u0026gt; Bootloader Unlock \u0026gt; Run and follow the instructions. At one point, it\u0026#39;ll send you to Sony website for the unlock code where you have to approve the fact that your warranty is being void. :P Once the BL is unlocked, your phone would boot and you\u0026#39;ll have lost all your apps, data, everything. You may then start from scratch again or restore from any previous backup. Follow the tutorial at XDA. Ignore step 2 of that guide if you are using Ubuntu. You\u0026#39;ll have your phone rooted in no time. :)","date":1341215940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1341215940,"objectID":"30606f1c7c14c00b320b11590ef29871","permalink":"https://bibhasdn.com/posts/2012-07-02-rooting-xperia-neo-v-mt11i-with-4-0-2-a-0-62-build-on-ubuntu/","publishdate":"2012-07-02T07:59:00Z","relpermalink":"/posts/2012-07-02-rooting-xperia-neo-v-mt11i-with-4-0-2-a-0-62-build-on-ubuntu/","section":"posts","summary":"Warning: While rooting, unlocking bootloader would wipe all your phone's data and apps. So Backup before proceeding!","tags":["android","neo","neo-v","neov","root","rooting","xperia"],"title":"Rooting Xperia Neo V MT11i with 4.0.2.A.0.62 Build (on Ubuntu)","type":"posts"},{"authors":null,"categories":null,"content":"Important Dates Call for proposals opens :: June 26, 2012. Proposal submission deadline :: August 25, 2012. Proposal acceptance :: Aug 31, 2012. First presentation upload :: Sep 15, 2012. Final presentation upload (with changes if any) :: Sept 25, 2012. Conference :: September 28th, 29th and 30th, 2012. Important Links Conference URL :: http://in.pycon.org/2012/ CFP Link :: http://in.pycon.org/2012/funnel/pyconindia2012/ Sponsorship :: bit.ly/pyinsp-pdf Tickets :: http://pyconindia2012.doattend.com/ Location :: http://goo.gl/maps/jYyv Contact Details Twitter ::https://twitter.com/pyconindia Sponsorship ::contact@in.pycon.org Sponsorship contact :: Anand Chitipothu, +917760404495 or Sreekanth Rameshaiah sree@mahiti.org, +919845512611 Reblogged from Bit Bucket Hell. ","date":1340783940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1340783940,"objectID":"66a1449d3967a8e1236299b6d3401a76","permalink":"https://bibhasdn.com/posts/2012-06-27-pycon-india-2012-more-details/","publishdate":"2012-06-27T07:59:00Z","relpermalink":"/posts/2012-06-27-pycon-india-2012-more-details/","section":"posts","summary":"Important Dates Call for proposals opens :: June 26, 2012. Proposal submission deadline :: August 25, 2012. Proposal acceptance :: Aug 31, 2012. First presentation upload :: Sep 15, 2012. Final presentation upload (with changes if any) :: Sept 25, 2012. Conference :: September 28th, 29th and 30th, 2012. Important Links Conference URL :: http://in.pycon.org/2012/ CFP Link :: http://in.pycon.org/2012/funnel/pyconindia2012/ Sponsorship :: bit.ly/pyinsp-pdf Tickets :: http://pyconindia2012.doattend.com/ Location :: http://goo.gl/maps/jYyv Contact Details Twitter ::https://twitter.com/pyconindia Sponsorship ::contact@in.pycon.org Sponsorship contact :: Anand Chitipothu, +917760404495 or Sreekanth Rameshaiah sree@mahiti.org, +919845512611 Reblogged from Bit Bucket Hell.","tags":["pycon","python"],"title":"PyCon India 2012 - More Details","type":"posts"},{"authors":null,"categories":null,"content":"PyCon is here again! Last year had awesome fun at PyCon 2011 as a beginner python-tamer. This time I’m hoping to have even more fun because I’ll be able to understand more of what they are saying. :P\nUnlike last time, PyCon 2012 is going to be held in Bangalore, at Dharmaram Vidya Kshetram from September 28-30. More details can be found on their website. And their registration page is at DoAttend. The Early Bird tickets are Rs600 + Rs300. I just bought ’em. Go get them while they last.\nView Larger Map Venue being Bangalore is fine for me as I have a friend’s home where I can stay. Last year had real trouble with the place to stay in Pune. Had to crash at some unknown friend(!)’s place, then book a hotel room etc etc. But not this time.\nHoping to have some real good time. Also hoping to meet few friends I’ve only spoken to via web. That should be fun. :)\nUpdate: I wrote another post with more details about PyCon India 2012.\n","date":1340092740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1340092740,"objectID":"d8ee65296cb4537d6a3b95cc2a7009c1","permalink":"https://bibhasdn.com/posts/2012-06-19-pycon-india-2012-registration-is-open/","publishdate":"2012-06-19T07:59:00Z","relpermalink":"/posts/2012-06-19-pycon-india-2012-registration-is-open/","section":"posts","summary":"PyCon is here again! Last year had awesome fun at PyCon 2011 as a beginner python-tamer. This time I’m hoping to have even more fun because I’ll be able to understand more of what they are saying. :P\n","tags":["bangalore","pycon","python"],"title":"PyCon India 2012 Registration is Open!","type":"posts"},{"authors":null,"categories":null,"content":"Flask is a microframework for Python based on Werkzeug, Jinja 2 and good intentions. And before you ask: It\u0026#39;s BSD licensed! I came across Flask when I was going through the apps from Hasgeek. All their sites are built on Flask. So I thought of giving it a try and I\u0026#39;m not disappointed. Flask is awesome. Minimal, supports Jinja for template managing and all you have to do is work on your app logic. Very less work involved to manage the framework. Here are the quick steps to follow to develop with Flask and deploy the app on an Nginx server -\nInstall Flask in a vertualenv. Make a file named your_app_name.py and start building your app. Test the app locally and when you think you\u0026#39;re ready to deploy prepare your server. Install gcc, python, python-dev, python-virtualenv on your server. many deployment options, I chose uWSGI. It seemed to have very little footsteps. Setup the virtualenv and transfer your files to server. Install uWSGI inside your virtualenv with pip. pip install uwsgi Deploy using uWSGI and Supervisor. Just one thing, instead of using that Symlink method to deploy your site, you might prefer to use these nginx_ensite and nginx_dissite commands. I made a special executable named nginx_renabsitethat disables the provided site config, reloads the server, then enables new config and again reloads the server - nginx_dissite $1 /etc/init.d/nginx reload nginx_ensite $1 /etc/init.d/nginx reload Place this file to /usr/sbin/nginx_renabsiteand you can run it like $ nginx_renabsite site_config_filename Your app should be up and running by now. Once you make any changes to your app, upload the files to server, then reload Supervisor with supervisorctl. Things should be fine now. :) P.S. - Here is a fabfile for this deployment. I haven’t tried it out yet.\n","date":1339660740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1339660740,"objectID":"c32cbec94ecd9a8fb81c3f1b647c6367","permalink":"https://bibhasdn.com/posts/2012-06-14-development-and-deployment-of-flask-app-on-nginx-with-uwsgi-supervisor/","publishdate":"2012-06-14T07:59:00Z","relpermalink":"/posts/2012-06-14-development-and-deployment-of-flask-app-on-nginx-with-uwsgi-supervisor/","section":"posts","summary":"Flask is a microframework for Python based on Werkzeug, Jinja 2 and good intentions. And before you ask: It's BSD licensed! I came across Flask when I was going through the apps from Hasgeek. All their sites are built on Flask. So I thought of giving it a try and I'm not disappointed.","tags":["deploy","flask","nginx","python","server","supervisor"],"title":"Development and Deployment of Flask app on Nginx with uWSGI+Supervisor","type":"posts"},{"authors":null,"categories":null,"content":"Last night like everyone I downloaded Instagram for my Android phone with really high hopes. But it seems they built the app in such a hurry that they forgot to adapt to the ways an Android app works.\nMy friend Rajesh pointed that the bottom bar shouldn’t be there always and they should make use of the menu key instead, which, strangely enough, doesn’t do anything right now. Well, most users won’t mind, cause I hardly needed the menu button, everything was right in front of me. The share button icon is different than what it usually is. That’s a little trouble cause we’re used to the antler-like share icon. Post-upload sharing is incomplete. If I choose to share the picture after upload using the share button, instead of while uploading it, choosing Twitter or Facebook will give me just the link. The caption is not included in the tweet or the Facebook post. You have to manually write it. That is not good. My front facing camera is not working with Instagram’s own Camera app. It says picture is too small. It’s strange that they would have such a filter. But I saw the most annoying thing this morning when I saw that there was an update for Instagram. I updated, thinking it’ll fix some of the problems, but instead I found that the update size was 12mb+. That’s the size of the original application! This is just embarrassing. They are yet to figure out how android apps update works! Don’t know if it was tight schedule or incompetent developers or both, but it seems like to me that they built it in a rush. They tried to move fast and left these bugs behind. I hope they fix these problems soon.\n","date":1333526340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1333526340,"objectID":"753fd97677eed073cc31ab7a37c86890","permalink":"https://bibhasdn.com/posts/2012-04-04-instagram-for-android-still-needs-a-lot-of-work/","publishdate":"2012-04-04T07:59:00Z","relpermalink":"/posts/2012-04-04-instagram-for-android-still-needs-a-lot-of-work/","section":"posts","summary":"Last night like everyone I downloaded Instagram for my Android phone with really high hopes. But it seems they built the app in such a hurry that they forgot to adapt to the ways an Android app works.\nMy friend Rajesh pointed that the bottom bar shouldn’t be there always and they should make use of the menu key instead, which, strangely enough, doesn’t do anything right now. Well, most users won’t mind, cause I hardly needed the menu button, everything was right in front of me. The share button icon is different than what it usually is. That’s a little trouble cause we’re used to the antler-like share icon. Post-upload sharing is incomplete. If I choose to share the picture after upload using the share button, instead of while uploading it, choosing Twitter or Facebook will give me just the link. The caption is not included in the tweet or the Facebook post. You have to manually write it. That is not good. My front facing camera is not working with Instagram’s own Camera app. It says picture is too small. It’s strange that they would have such a filter. But I saw the most annoying thing this morning when I saw that there was an update for Instagram. I updated, thinking it’ll fix some of the problems, but instead I found that the update size was 12mb+. That’s the size of the original application! This is just embarrassing. They are yet to figure out how android apps update works! Don’t know if it was tight schedule or incompetent developers or both, but it seems like to me that they built it in a rush. They tried to move fast and left these bugs behind. I hope they fix these problems soon.\n","tags":["android","app","camera","instagram"],"title":"Instagram for Android still needs a lot of work","type":"posts"},{"authors":null,"categories":null,"content":"Tonight I came across few youtube videos that pointed out how we tend “not to notice” things that we’re not expecting. I’ll say no more and let you watch them and see for yourselves.\nHow did you like it? Feel stupid? Confused? Want to watch again? Go ahead. Once you’re satisfied realizing what just happened, watch the later one.\nHad enough fun yet?\nYes, this is the fact. It is just as the video says, “It’s easy to miss something you’re not looking for”. It can be anything from a Dancing Bear to a bear’s statue replaced by an iron armor. And if you’re not cautious enough, this might wind you up into something fatal.\nSo, keep your eyes open. :)\n","date":1333267140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1333267140,"objectID":"fafd7899afc24a3613cbf94402d177c0","permalink":"https://bibhasdn.com/posts/2012-04-01-how-aware-are-you-of-whats-going-around-you/","publishdate":"2012-04-01T07:59:00Z","relpermalink":"/posts/2012-04-01-how-aware-are-you-of-whats-going-around-you/","section":"posts","summary":"Tonight I came across few youtube videos that pointed out how we tend “not to notice” things that we’re not expecting. I’ll say no more and let you watch them and see for yourselves.\nHow did you like it? Feel stupid? Confused? Want to watch again? Go ahead. Once you’re satisfied realizing what just happened, watch the later one.\nHad enough fun yet?\n","tags":[],"title":"How aware are you of what's going around you?","type":"posts"},{"authors":null,"categories":null,"content":"The other day I was chatting at SuperUser chatroom and @studiohack mentioned that he had a Intro-to-Mac class that evening. That sounded funny as it was completely strange to me, having studied here in India. The closest subject I had to that was “Introduction to Computing” which was boring, and boiled down to C lessons, nothing more. I felt interested. And we started talking about how we taught ourselves.\nMost of us in that chatroom at that point were self-taught. Including me. Whatever I know about computers, programming and all related things, I taught myself those. College taught me very few stuffs that I use now, but even for those we had in syllabus, I was aware of them beforehand.\nBack to the topic, @Sidran32 started talking about how he learned things in his college -\nYou know, when I went to my college, they never intro\u0026#39;d us to Windows, Mac, or Linux/Solaris/UNIX. They just kind of threw us on Solaris machines, gave us a 1 day rudimentary overview on commands like cd, ls, and make, and then just let us have at it. When I took a class that had us work on Macs in the Mac lab, there was barely anything else, other than “these are the programs we’re going to use, and this is how you compile in XCode”. :P\nIt was actually kind of fun. :P If we wanted to ssh from our dorms, we were on our own. Everyone eventually figured out how to, but the teachers only gave suggestions (like putty) if we asked them after class.\nHeh, there was a cracked version of xwin32 going around campus for a while. I used that until I figured out how to use cygwin, and then started experimenting with dual-booting Linux. :P My immediate reaction was “This is how education should be!”.\nNowadays I’m looking ahead for a masters degree. Not because it will add some more characters in my resume, just because I feel that I wasted those 4 years of mine. First year barely had any computer related subjects(Mind it that I was studying Information Technology). So, as a result, in that year, my rank was being counted from bottom. I failed a subject and was ranked second from last. :P\n\u0026lt;rant\u0026gt; We were taught how to crack exams. How to score more. So, plagiarism was considered legit. Teachers wont say so, but they hardly reacted if someone was found copying in exams. Assignments were meant for 4 to 5 students in the class. Others are supposed to copy from them. We used to stay awake the night before exam hoping that the paper would leak. We used to hide books in cloths and go to bathroom during exams to study. Apart from the fact that the syllabus is obsolete, no real life scenarios were discussed in the laboratories. Most of my batch-mates never heard of SSH(the case is still the same, although they are working in reputed Tech companies), let alone know how to use it. Version Controlling is alien to most. Software development life cycles meant waterfall model. Agile was Hebrew. Teachers would write the whole client-server communication program in C on white board so that students could copy it and vomit on the paper during exams. Handful of us knew how to debug a C code, how to trace the errors. We used to have strike in college(Shutting down college activities, classes, labs) if any of us failed in the exams. Students would lock the Principal and faculties in the college saying that students should not be failed. Those same students spent the semester at the corner of the college field smoking Gold Flake, instead of attending the class. Still it was the college’s fault if they failed the exam. Hilarious. Ridiculous. \u0026lt;/rant\u0026gt;\nI regret those years. If it were possible, I’d have done the same graduation in some institute where they teach the way @Sidran32 was taught.\nI read articles where big-shot corporate gurus rant that only 10-15% of the student mass in India are employable. I wish they had spent at least 5% of their fortune in teaching these students. Where students feel challenged every single moment of those 4 years. I guess it’s too much to ask.\nPity.\n","date":1333094340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1333094340,"objectID":"4ffa9fbe208817a97d58fc4c01f8138e","permalink":"https://bibhasdn.com/posts/2012-03-30-education-how-i-wanted-it-to-be/","publishdate":"2012-03-30T07:59:00Z","relpermalink":"/posts/2012-03-30-education-how-i-wanted-it-to-be/","section":"posts","summary":"The other day I was chatting at SuperUser chatroom and @studiohack mentioned that he had a Intro-to-Mac class that evening. That sounded funny as it was completely strange to me, having studied here in India. The closest subject I had to that was “Introduction to Computing” which was boring, and boiled down to C lessons, nothing more. I felt interested. And we started talking about how we taught ourselves.\n","tags":[],"title":"Education, how I wanted it to be.","type":"posts"},{"authors":null,"categories":null,"content":"Thing have changed a lot, since the time, almost a year back, when I wrote about getting a new job and leaving the city. I was all excited about going to Nagpur and staying around Karthik, Akshay and others. But (there is Always a but) things didn’t go as I planned them.\nAs it turned out, I needed to stay in Kolkata for some more time, or rather I was needed to stay here. The mental environment at home wasn’t that good. Things were almost upside down. And with me gone, things might have gone pretty much in some bad way. So I decided to stay. Decided not to go to Nagpur(apologized a lot to the friends there for that). Instead started looking for a job here that could get me started and could help me pull my family out of all those troubles. With some helps from a friend, got a position into a well-known SME here.\nThings were well. I started to learn Python as it was a long time due in my to-learn list and also, the job required it. And fell in love with Python. I wanted to take my time and learn it properly. But the job required me to be Fast, as, along with learning Python, I had to manage servers, databases, almost everything that was needed in a web service development team, all by myself. So I started learning it fast and I was enjoying it! Started doing overtime at home. Whole day at office, half the night at home. Barely few hours of sleep and no (time for) rest at all. And just when it shouldn’t have, my health gave up.\nI’ve always been of a little weak health. Spondilytis-like syndrome was already detected once when I was at high school. 3 years of treatment fixed me up, and stopped my outdoor sports habits. That’s when I started to like computer. Few more months and I knew I couldn’t live without it. Something similar happened this time too. After few weeks of above mentioned schedule, neck pain started. It got more severe by every day. Went to doctor, did an X-Ray of neck and he kind of predicted the worse. According to him, that old syndrome of mine was back and I was told to stop working sitting in front of computers for hours, for at least few months(that might expand to unknown period of time), and take rest, do exercises and etc etc.\nI knew that was the end of my job. As I suddenly had to quit, right when I was most needed there(provided I was a one-man team), couldn’t leave in good terms. But that needed to be done, for my own sake.\nOne month passed. I was maintaining all the regular exercise and stuff. I would hardly come online from PC, let alone work. But given it was me(I don’t remember when was the last time I spent a day without using my PC or visit the cyber cafe when I didn’t have one), I just couldn’t suddenly stop working! Programming is everything to me. Can’t spend a day without writing something, hacking something up.\nSo even with all those instructions from the doctor, I started being what I am. But still couldn’t code or linger around for longer than few hours at a stretch.\nEven though I was miserable, I couldn’t ignore the problems at home. I needed to earn something. So I called up a friend. Told him I needed a work. And he also needed someone somewhat like me. No Python this time. But I got what I needed. Some work to earn me something. Enough time to rest, and learn Python(I really love it). Things have been going on like that since then.\nNow things are looking good. Health is much better. Can spend less time on PC, when I’m not working, thanks to the new smartphone. Found new friends. Disconnected myself from all the previous contacts. I needed a new start. Needed to do things a new way. I figure, I was trying to get ahead of myself a year back. I remember all the foolish mistakes. Now I’m slowing down. Behaving like a 22 years old. Now all I’m looking for is an adventure. Planning to leave the city soon. Things at home are almost settled. Found friends who can accompany me in my adventure. Looking for places I can fit in. Everything is falling into places.\nI’m really excited.\n","date":1333094340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1333094340,"objectID":"15a4c4a0499b2b09f4e22e43269d6339","permalink":"https://bibhasdn.com/posts/2012-03-30-my-life-nowadays/","publishdate":"2012-03-30T07:59:00Z","relpermalink":"/posts/2012-03-30-my-life-nowadays/","section":"posts","summary":"Thing have changed a lot, since the time, almost a year back, when I wrote about getting a new job and leaving the city. I was all excited about going to Nagpur and staying around Karthik, Akshay and others. But (there is Always a but) things didn’t go as I planned them.\n","tags":[],"title":"My Life, Nowadays.","type":"posts"},{"authors":null,"categories":null,"content":"I always get stuck when I try to find a template for my website’s homepage. I’ve tried lot of templates, designed some myself(which sucked a lot), even tried using services like About[dot]me. But none of them truly satisfied me.\nOne fact about myself is that I Love Terminal. I Love shell. So while thinking about a theme for my homesite, it suddenly occurred to me to put a shell on my site! It’s pretty damn straight. Can easily be done with Javascript. And I can very easily evolve it!(this is the part I Love most) I can put innumerable things in it. So I built this.\nAfter building it, I suddenly thought of showing it off a bit and then Geekli.st came in my mind. I’ve signed up for a long time there but never created a card. So went ahead and created a card - I’ve put a Shell on my website. Got the first ^5 in few minutes and then within few hour it was trending! And it is still(at the time of this post) trending! Got 5 6 ^5 till now. But that’s enough. Enough to keep me working on it and something new. :)\n1:03 AM right now. Was thinking of pulling a whole-nighter, but had a rough day and now this headache and stomach-ache is killing me. I guess I’ll sleep for tonight. Just added two new stuff in the site - using the “open” option with “blog” or “github” command will open my blog and github profile in a new tab.\n","date":1331452740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1331452740,"objectID":"66fda9c644ef67402d79ed49f712fa6c","permalink":"https://bibhasdn.com/posts/2012-03-11-my-websites-new-homepage/","publishdate":"2012-03-11T07:59:00Z","relpermalink":"/posts/2012-03-11-my-websites-new-homepage/","section":"posts","summary":"I always get stuck when I try to find a template for my website’s homepage. I’ve tried lot of templates, designed some myself(which sucked a lot), even tried using services like About[dot]me. But none of them truly satisfied me.\n","tags":["geeklist","website"],"title":"My Website's New Homepage","type":"posts"},{"authors":null,"categories":null,"content":"I use Skype a lot. But although Skype has a fantastic version for Windows, the Linux part is a bit weak. I run Fedora 14 on my laptop(Compaq CQ42 173TU) and for some reason, Skype wont run on it. With the RPM package of 2.2 Beta, it gets installed but never runs. So I installed the static version of it following this instructions here. But when I would try to run skype from terminal, this error would occur - [bash] [root@localhost ~]# skype skype: error while loading shared libraries: libXv.so.1: cannot open shared object file: No such file or directory [/bash] So to check which dependency package I was missing, I searched with YUM - [bash] [root@localhost ~]# yum whatprovides libXv.so.1 [/bash] and found that this specific package libXv-1.0.5-1.fc13.i686 has that specific file. So although I’m running Fedora 14 and it’s of x86_64 architecture, I installed that package which was meant for Fedora 13 and i686 architecture. Then ran skype from terminal and it worked!\n","date":1329033540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1329033540,"objectID":"94157bc17fa33a5213cd74f45039d30d","permalink":"https://bibhasdn.com/posts/2012-02-12-making-skype-usable-on-fedora-14-and-maybe-later-versions-too/","publishdate":"2012-02-12T07:59:00Z","relpermalink":"/posts/2012-02-12-making-skype-usable-on-fedora-14-and-maybe-later-versions-too/","section":"posts","summary":"I use Skype a lot. But although Skype has a fantastic version for Windows, the Linux part is a bit weak. I run Fedora 14 on my laptop(Compaq CQ42 173TU) and for some reason, Skype wont run on it. With the RPM package of 2.2 Beta, it gets installed but never runs. So I installed the static version of it following this instructions here. But when I would try to run skype from terminal, this error would occur - [bash] [root@localhost ~]# skype skype: error while loading shared libraries: libXv.so.1: cannot open shared object file: No such file or directory [/bash] So to check which dependency package I was missing, I searched with YUM - [bash] [root@localhost ~]# yum whatprovides libXv.so.1 [/bash] and found that this specific package libXv-1.0.5-1.fc13.i686 has that specific file. So although I’m running Fedora 14 and it’s of x86_64 architecture, I installed that package which was meant for Fedora 13 and i686 architecture. Then ran skype from terminal and it worked!\n","tags":["fedora","install","skype","terminal"],"title":"Making Skype usable on Fedora 14 and maybe later versions too","type":"posts"},{"authors":null,"categories":null,"content":" ","date":1329033540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1329033540,"objectID":"8b0d8f44b6583fdc92801863ff590885","permalink":"https://bibhasdn.com/posts/2012-02-12-the-most-useless-machine-ever/","publishdate":"2012-02-12T07:59:00Z","relpermalink":"/posts/2012-02-12-the-most-useless-machine-ever/","section":"posts","summary":" ","tags":["video","youtube"],"title":"The Most Useless Machine Ever","type":"posts"},{"authors":null,"categories":null,"content":"This Firefox plugin can help you view any website in 3D, layered according to DOM elements.\n","date":1326959940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1326959940,"objectID":"1f7f134ae66d9983f3670faa0df4e5a5","permalink":"https://bibhasdn.com/posts/2012-01-19-firefox-tilt-3d-add-on/","publishdate":"2012-01-19T07:59:00Z","relpermalink":"/posts/2012-01-19-firefox-tilt-3d-add-on/","section":"posts","summary":"This Firefox plugin can help you view any website in 3D, layered according to DOM elements.\n","tags":["video","youtube"],"title":"Firefox Tilt 3D add-on","type":"posts"},{"authors":null,"categories":null,"content":"This video shows the demonstration of interfacing external GSM modem with Android Workbench and controlling it from a Android mobile over bluetooth communication. Here, the android mobile DONT HAVE GSM SIM CARD. The call is processing from external GSM modem connected on the ADK board.\nTarget applications::\nFile transfer over GSM Call Tracking applications Automation applications for consumers/Industries Robotics applications and more. Product page, http://ethicstech.in/aw/ ","date":1326959940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1326959940,"objectID":"9438085875e9b299db03c5afeb627407","permalink":"https://bibhasdn.com/posts/2012-01-19-interfacing-external-gsm-modem-with-android-workbench/","publishdate":"2012-01-19T07:59:00Z","relpermalink":"/posts/2012-01-19-interfacing-external-gsm-modem-with-android-workbench/","section":"posts","summary":"This video shows the demonstration of interfacing external GSM modem with Android Workbench and controlling it from a Android mobile over bluetooth communication. Here, the android mobile DONT HAVE GSM SIM CARD. The call is processing from external GSM modem connected on the ADK board.\n","tags":["video","youtube"],"title":"Interfacing external GSM modem with Android Workbench","type":"posts"},{"authors":null,"categories":null,"content":"Yum. The hamburger restaurant with a menu that boasts unhealthy foods.\n","date":1326873540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1326873540,"objectID":"5c603198876ef2967cdfa30e34b20b9a","permalink":"https://bibhasdn.com/posts/2012-01-18-the-heart-attack-grill-by-abcnews/","publishdate":"2012-01-18T07:59:00Z","relpermalink":"/posts/2012-01-18-the-heart-attack-grill-by-abcnews/","section":"posts","summary":"Yum. The hamburger restaurant with a menu that boasts unhealthy foods.\n","tags":["video","youtube"],"title":"The Heart Attack Grill","type":"posts"},{"authors":null,"categories":null,"content":"New Capture.\nA new Flat Bari.. via Flickr http://flic.kr/p/bcM53P","date":1326614340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1326614340,"objectID":"0ab636d12fce641958d2dc02a0a73eae","permalink":"https://bibhasdn.com/posts/2012-01-15-painting-the-cage/","publishdate":"2012-01-15T07:59:00Z","relpermalink":"/posts/2012-01-15-painting-the-cage/","section":"posts","summary":"New Capture.\n","tags":["capture","flickr"],"title":"Painting the Cage","type":"posts"},{"authors":null,"categories":null,"content":"It may sometime happen that to validate a form field you need to check the value with some existing value from the database related to the User or some other entity. But sadly Django doesn’t allow accessing the Request object in the clean() or clean_\u0026lt;FieldName\u0026gt;() methods. Here is a way around it - All you need to do is override the default init() function of forms.Form with this - [python] def init(self, request, *args, **kwargs): self.request = request super(CreateTagForm, self).init(*args, **kwargs) [/python] Now when you call the Form, you can call it like - [python] form = YourForm(request, request.POST) [/python] Now the whole code will look like - [python] from django import forms\nclass YourForm(forms.Form): name = forms.CharField(max_length=50, min_length=1) mark = forms.IntegerField(min_value=1, max_value=100)\ndef __init__(self, request, *args, **kwargs): self.request = request super(YourForm, self).__init__(*args, **kwargs) def clean_mark(self): marks_left = get_marks_left(self.request.user) # Do what more you want to do [/python]\nThat’s it. Happy Coding. :)\n","date":1326441540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1326441540,"objectID":"7c30f907d2766b8bac125b1cca21c0ad","permalink":"https://bibhasdn.com/posts/2012-01-13-avail-request-object-in-django-form-validation/","publishdate":"2012-01-13T07:59:00Z","relpermalink":"/posts/2012-01-13-avail-request-object-in-django-form-validation/","section":"posts","summary":"It may sometime happen that to validate a form field you need to check the value with some existing value from the database related to the User or some other entity. But sadly Django doesn’t allow accessing the Request object in the clean() or clean_\u003cFieldName\u003e() methods. Here is a way around it - ","tags":["coding","development","django","pinax","python"],"title":"Avail Request Object in Django Form Validation","type":"posts"},{"authors":null,"categories":null,"content":"I tend to search a lot. Various websites for various resources. https://chrome.google.com/webstore/detail/oeblleideililpfnlkiepbnipanofloh\n","date":1326441540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1326441540,"objectID":"8bb7998d2c1b1e50d9323ca89cfb2acb","permalink":"https://bibhasdn.com/posts/2012-01-13-search-anywhere---a-chrome-extension-to-search-websites-you-like/","publishdate":"2012-01-13T07:59:00Z","relpermalink":"/posts/2012-01-13-search-anywhere---a-chrome-extension-to-search-websites-you-like/","section":"posts","summary":"I tend to search a lot. Various websites for various resources. https://chrome.google.com/webstore/detail/oeblleideililpfnlkiepbnipanofloh\n","tags":[],"title":"Search Anywhere - A Chrome Extension to Search Websites You Like","type":"posts"},{"authors":null,"categories":null,"content":"I cannot stay away from Terminal. :| So I was setting up a debian box inside my Windows installation. I downloaded a net installation image of Debian 6.0.3 (debian-6.0.3-i386-netinst.iso) and booted into it in VirtualBox. Well, while installing it, VB was in NAT mode and I didn’t notice that. So the installer configured the OS according to NAT mode and I had the network connection after I logged in. But as I wanted to run few server applications, I needed the OS to use a bridged connection. So I opened the network configuration of VB, changed it to Bridged Adapter mode, selected by adapter, hit Ok, then restarted the network service in the box and tried to ping google. But got error. The network wasn’t working.\nFired up Google, but after few searches, I landed on the conclusion that it was the basic network configuration that I needed to follow. :|\ni.e. Following commands - [bash] sudo ifconfig eth0 10.0.0.5 netmask 255.255.255.0 sudo route add default gw 10.0.0.1 eth0 #Now restart networking sudo /etc/init.d/networking restart [/bash]\nThat did the trick.\n","date":1326268740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1326268740,"objectID":"b2914dfd98a49fc430dcca32ceacf127","permalink":"https://bibhasdn.com/posts/2012-01-11-setup-bridged-network-inside-virtualbox-on-debian-ubuntu/","publishdate":"2012-01-11T07:59:00Z","relpermalink":"/posts/2012-01-11-setup-bridged-network-inside-virtualbox-on-debian-ubuntu/","section":"posts","summary":"I cannot stay away from Terminal. :| So I was setting up a debian box inside my Windows installation. I downloaded a net installation image of Debian 6.0.3 (debian-6.0.3-i386-netinst.iso) and booted into it in VirtualBox. Well, while installing it, VB was in NAT mode and I didn’t notice that. So the installer configured the OS according to NAT mode and I had the network connection after I logged in. But as I wanted to run few server applications, I needed the OS to use a bridged connection. So I opened the network configuration of VB, changed it to Bridged Adapter mode, selected by adapter, hit Ok, then restarted the network service in the box and tried to ping google. But got error. The network wasn’t working.\n","tags":["debian","linux","networking","setup"],"title":"Setup Bridged Network inside VirtualBox on Debian/Ubuntu","type":"posts"},{"authors":null,"categories":null,"content":"Found this Infographic and thought about sharing. Read it and know the difference.\n[caption id=\u0026#34;\u0026#34; align=“aligncenter” width=“600” caption=“Geek-Nerd Difference”][/caption]\n","date":1326095940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1326095940,"objectID":"422db1e40bf2325eecb05edab94921e9","permalink":"https://bibhasdn.com/posts/2012-01-09-geek-or-nerd-know-the-difference/","publishdate":"2012-01-09T07:59:00Z","relpermalink":"/posts/2012-01-09-geek-or-nerd-know-the-difference/","section":"posts","summary":"Found this Infographic and thought about sharing. Read it and know the difference.\n","tags":["geek","infographic","nerd"],"title":"Geek or Nerd? Know The Difference.","type":"posts"},{"authors":null,"categories":null,"content":"In India? Wanna have some drink but dunno where to go? Well, Here is a portal to help you with that.\nGive http://wherethefuckshouldigofordrinks.com/ a visit. Might end up finding a bar/pub near your place that you never knew of. :)\n","date":1326095940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1326095940,"objectID":"d62892d312f023887791e78e67546af2","permalink":"https://bibhasdn.com/posts/2012-01-09-where-the-fck-should-you-go-for-drink/","publishdate":"2012-01-09T07:59:00Z","relpermalink":"/posts/2012-01-09-where-the-fck-should-you-go-for-drink/","section":"posts","summary":"In India? Wanna have some drink but dunno where to go? Well, Here is a portal to help you with that.\n","tags":["booze","drink","india"],"title":"Where The F*ck Should You Go For Drink?","type":"posts"},{"authors":null,"categories":null,"content":"I was looking for a tool where I can write a little snippet in PHP and test it out/debug really quickly. First thought of something like these online compilers, like IDEONE. But it’s too heavy for my taste. I needed something faster. Yesterday, came across this blog post from Jordi Boggiano, who saved some work of mine(and lot of other developers) and made a tool that can run inside your browser, and let you run and debug PHP codes with ease, and it’s also FAST.\nHere is a screenshot -\n[caption id=\u0026#34;\u0026#34; align=“aligncenter” width=“622” caption=“PHP Console”][/caption]\nLooks good, right? You can grab the tool from github and use it on your localhost or your personal server, wherever you want. :)\n","date":1324195140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1324195140,"objectID":"53e7d0c83b64226b23acb62a15decbf6","permalink":"https://bibhasdn.com/posts/2011-12-18-php-console-inside-your-browser/","publishdate":"2011-12-18T07:59:00Z","relpermalink":"/posts/2011-12-18-php-console-inside-your-browser/","section":"posts","summary":"I was looking for a tool where I can write a little snippet in PHP and test it out/debug really quickly. First thought of something like these online compilers, like IDEONE. But it’s too heavy for my taste. I needed something faster. Yesterday, came across this blog post from Jordi Boggiano, who saved some work of mine(and lot of other developers) and made a tool that can run inside your browser, and let you run and debug PHP codes with ease, and it’s also FAST.\n","tags":["console","debug","php"],"title":"PHP Console Inside Your Browser","type":"posts"},{"authors":null,"categories":null,"content":"A friend of mine owns an AWS(Amazon Web Services) account and wants to run an EC2(Elastic Compute Cloud) instance for his domain. But the problem is, he is not much technically sound to handle the Ubuntu server himself. A solution like cPanel is much better for him because then he can just click and have stuffs done, without writing a single line of command. But sadly, cPanel aint free. So is there any free alternative? I searched a bit and found that Webmin and its derivative Virtualmin matches the criterion perfectly. To make his job easy, I wrote a Python script using Fabric, that automatically logs into his EC2 instance and installs all the packages required(e.g. lamp-server) (Will post the Fabric recipe later). I just needed to install the Virtualmin on it for him to control everything smoothly.\nVirtualmin is a bit complicated to setup. So they provide an installation script to make the job easy. To install Virtualmin on any server, first choose the appropriate installation script from here for your server, then do this(I’m using the installation script for Ubuntu) - [crayon lang=“sh”] $ wget http://software.virtualmin.com/gpl/scripts/install.sh $ sudo sh install.sh [/crayon]\nThis should install Webmin, Virtualmin and configure everything.\nNow, as we usually use a keypair file to SSH to cloud servers like EC2, there is no password for root user. But to login to the virtualmin interface, you’ll need to set a password for the root user only for the virtualmin interface. It is NOT about setting a root password for your server’s root user. This is just a password to login to virtualmin. To do that, execute this command - [crayon lang=“sh”] //For ubuntu sudo /usr/share/webmin/changepass.pl /etc/webmin root XYZ //if not, then sudo /usr/libexec/webmin/changepass.pl /etc/webmin root XYZ //Where XYZ is the new password [/crayon]\nOnce you’ve done this, go visit - [crayon lang=“html”] https://example.com:10000 [/crayon] Or: [crayon lang=“html”] https://xxx.xx.xx.xxx:10000 [/crayon]\nRemember, You MUST use https. And Virtualmin is available on port 10000 by default. So remember to edit your security group(in case of Amazon AWS) to allow TCP access to port 10000.\nIf you’ve done everything right, you’ll be able to see the login page of Virtualmin. Dont bother if your browser shows some warning about the validity of the SSL security when you use https, Just ignore it and proceed.\nOnce you login, you’ll see a panel like this -\n[caption id=\u0026#34;\u0026#34; align=“aligncenter” width=“448” caption=“Virtualmin Admin Panel”][/caption]\nNow you can add Virtual Servers and configure them as much as you can. You can add virtual hosts to add domain names, setup Email servers etc etc and a lot more things.\nGo ahead and give it a try. If you face any trouble, ask me or consult Virtualmin’s official installation guide.\nHappy Cloud Computing. :)\n","date":1320566340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1320566340,"objectID":"1be447ac91f9c0aa4713ae5b8d77a5b1","permalink":"https://bibhasdn.com/posts/2011-11-06-manage-your-cloud-server-easily-using-virtualmin/","publishdate":"2011-11-06T07:59:00Z","relpermalink":"/posts/2011-11-06-manage-your-cloud-server-easily-using-virtualmin/","section":"posts","summary":"A friend of mine owns an AWS(Amazon Web Services) account and wants to run an EC2(Elastic Compute Cloud) instance for his domain. But the problem is, he is not much technically sound to handle the Ubuntu server himself. A solution like cPanel is much better for him because then he can just click and have stuffs done, without writing a single line of command. But sadly, cPanel aint free. So is there any free alternative? I searched a bit and found that Webmin and its derivative Virtualmin matches the criterion perfectly. ","tags":["amazon","aws","ec2","fabric","python","virtualmin","webmin"],"title":"Manage Your Cloud Server Easily Using Virtualmin","type":"posts"},{"authors":null,"categories":null,"content":"An infographic on the world of programming. How it began and who all carried it to where it is now.\n[caption id=\u0026#34;\u0026#34; align=“aligncenter” width=“432” caption=“World of Programming”][/caption]\n","date":1320479940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1320479940,"objectID":"c6c722a9c76e72078c9277c3a70a8b73","permalink":"https://bibhasdn.com/posts/2011-11-05-a-quick-tour-to-world-of-programming/","publishdate":"2011-11-05T07:59:00Z","relpermalink":"/posts/2011-11-05-a-quick-tour-to-world-of-programming/","section":"posts","summary":"An infographic on the world of programming. How it began and who all carried it to where it is now.\n","tags":["history","programming"],"title":"A Quick Tour to World of Programming","type":"posts"},{"authors":null,"categories":null,"content":"Ever since I came from Yahoo! Open Hack India, I’ve been craving for more nights like the one I had in Bangalore. Couldn’t just shake that excitement off. It was too much to ignore. So I have been looking for a way to do that again.\nTo those who are new to this idea of Hack-nights, No this is Not the usual meaning of the word “Hack” you come across. To us, “Hack” means - to build something in a very short time with whatever tools you have with you, breaking them apart and fixing them in an unique way to solve a certain purpose.\nAs a developer, no wonder I found it pretty interesting and was looking for a way to bring it to the town, our Kolkata, where a tech event is as rare as a Pink moon. :-/\nThe way was just in front of me, but I have been ignoring it for sometime. I have friends here who love programming, like me. They love developing small apps for their own use. They also share them to the world. So I started contacting them asking if they are interested in doing something like a hack-night. They seemed pretty interested, so I decided we’re not going to waste times planning. So 5 of us(Me, Umang, Rabimba, Ulhas and Mehul) just gathered up last Saturday and conduced the First ever WeekEndHack in Kolkata! I named it so because it seemed most appropriate. Also it’s short enough to be a Twitter hashtag. :P\nHere is a trivia of it, if last Saturday was the v1.0 of WeekEndhack, we had a beta release of it. The weekend before the last one, Me and Umang spent a night at a CCD in Sector 5 to get the idea of how it feels and how it should be. We felt that CCD is a bit out of budget for us, so the v1.0 final release was arranged a flat in South Kolkata, that belonged to a relative of Ulhas and was empty at that day. Turned out that it was perfectly OK. :)\nSo, as it was the first night, we spent the first half doing absolutely nothing new. We just put up a facebook page and a website for ourselves. You can visit them here and here respectively. Then as the night started fading, ideas seemed to pour onto us. We were coming up with one idea after another. Each of them were more interesting than the previous one. We mostly depended on Umang to decide the feasibility of the idea as he has a good knowledge about the current web market and apps. And when the sun was almost out, we found the gem we’ve gathered for. For some obvious reasons I’m unable to disclose the details right now, but you’ll see some fruit out of it pretty soon. :)\nAs we were almost out of time, we couldn’t finish building a prototype for it, so we saved it for the next WeekEndHack, which we’re planning to hold on 3rd September. Till then, we’re working on the website, and the facebook page and trying to connect to as many passionate minds as possible. We’ve got about 5-6 requests till now. I’m guessing the next one will be larger than the first one. :)\nAnd to add more to it, I’m trying to get some sponsor for it. Almost decided on one. A startup has agreed to give us some space to work at. :) I’ll publish more details on the website itself. So keep an eye on the website. The address is WeekEndHack.in .\nI’m looking forward to my friends in other cities to start the same thing at their home town itself. Chennai and Bangalore already has such events. But we are asking people from cities like Kolkata to start this, where tech events rarely happens. And I planned on doing this every alternate Saturday because I want people to get used to the idea. The main motto is to bring out the hidden passionate people out of the crowd, those who either don’t know any way to reach out to people about their ideas or thinks that doing so is impossible here in Kolkata.\nSo we’ll keep this up. If you’ve found the idea interesting, do contact me and Join us. We’re looking for your participation that can make the image of the city better in front of the world. :)\n","date":1314518340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1314518340,"objectID":"50e69af3b0f572b3e08d8a7e3e361e62","permalink":"https://bibhasdn.com/posts/2011-08-28-weekendhack-the-new-thing-in-town/","publishdate":"2011-08-28T07:59:00Z","relpermalink":"/posts/2011-08-28-weekendhack-the-new-thing-in-town/","section":"posts","summary":"Ever since I came from Yahoo! Open Hack India, I’ve been craving for more nights like the one I had in Bangalore. Couldn’t just shake that excitement off. It was too much to ignore. So I have been looking for a way to do that again.\nTo those who are new to this idea of Hack-nights, No this is Not the usual meaning of the word “Hack” you come across. To us, “Hack” means - to build something in a very short time with whatever tools you have with you, breaking them apart and fixing them in an unique way to solve a certain purpose.\nAs a developer, no wonder I found it pretty interesting and was looking for a way to bring it to the town, our Kolkata, where a tech event is as rare as a Pink moon. :-/\n","tags":["hack","kolkata","weekendhack"],"title":"\"WeekEndHack: The New Thing in Town!\"","type":"posts"},{"authors":null,"categories":null,"content":"I never knew that Apple didn’t always have the “apple” as the logo. This is their first logo -\n[caption id=\u0026#34;\u0026#34; align=“alignnone” width=“468” caption=“Apple Inc. - First Logo”][/caption]\nClick on it for a Higher resolution[1958 x 2457] version.\nThis logo was designed by Ron Wayne, the designer of Apple Inc at that time. The logo features Sir Isaac Newton sitting under an apple tree. It was inspired by a quotation by Wordsworth that was also inscribed into the logo that said:\n“Newton… A Mind Forever Voyaging Through Strange Seas of Thought... Alone.”   Sources:\nhttp://www.logoblog.org/apple_logo.php http://ghigo1972.deviantart.com/art/Apple-1st-logo-143927661 ","date":1313654340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1313654340,"objectID":"6f8a8a36c2fc5e71856d1db76ecdaabd","permalink":"https://bibhasdn.com/posts/2011-08-18-first-ever-apple-logo/","publishdate":"2011-08-18T07:59:00Z","relpermalink":"/posts/2011-08-18-first-ever-apple-logo/","section":"posts","summary":"I never knew that Apple didn’t always have the “apple” as the logo. This is their first logo -\n","tags":["apple","logo","newton","ron","wayne"],"title":"First Ever Apple Logo","type":"posts"},{"authors":null,"categories":null,"content":"This post is to the most exciting two days I had in years. Kudos to Yahoo! for screwing the first half and Kudos to the hackers to rock the whole time. :)\n","date":1312531140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1312531140,"objectID":"21ee6b5d87098671519149bbc77c1817","permalink":"https://bibhasdn.com/posts/2011-08-05-yahoo-open-hack-india-memories/","publishdate":"2011-08-05T07:59:00Z","relpermalink":"/posts/2011-08-05-yahoo-open-hack-india-memories/","section":"posts","summary":"This post is to the most exciting two days I had in years. Kudos to Yahoo! for screwing the first half and Kudos to the hackers to rock the whole time. :)\n","tags":["bangalore","hack","india","open","openhackindia","photography","photos","yahoo"],"title":"Yahoo! Open Hack India, 2011 - Memories","type":"posts"},{"authors":null,"categories":null,"content":"Tickets - Check. Camera - Check. Direction and stuff - Check. Laptop - Check. Hack Idea - Errr..\nAaaah, WTM. Will work on it on the way. For now, its just the excitement of attending the event. And I’m all geared up for anything it can throw at me. :)\nTo all the hackers out there who are also coming, See you there. Want to see great minds working on great ideas.. And want to be a part of it. That’s all I’m looking for. :)\n","date":1311839940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1311839940,"objectID":"62d72cf652b676d85ee5da681b418b44","permalink":"https://bibhasdn.com/posts/2011-07-28-all-set-for-yahoo-open-hack-india-2011-bangalore-openhackindia/","publishdate":"2011-07-28T07:59:00Z","relpermalink":"/posts/2011-07-28-all-set-for-yahoo-open-hack-india-2011-bangalore-openhackindia/","section":"posts","summary":"Tickets - Check. Camera - Check. Direction and stuff - Check. Laptop - Check. Hack Idea - Errr..\n","tags":["bangalore","hack","open","openhackday","openhackindia","yahoo"],"title":"\"All Set for Yahoo! Open Hack India 2011, Bangalore. #openhackindia\"","type":"posts"},{"authors":null,"categories":null,"content":"I know there are hell lot of people out there(like me) who are too lazy to open http://reader.google.com every time for latest news, yet want to stay updated of the news instantly. I made a simple solution for myself.\nThe logic is simple. I’m going to fetch the public feed of my reader timeline and going to put that in a Chrome app that shows desktop notifications instantly for any feed. :)\nI installed a Chrome app named Feed Notifier. After installing it, just go to Menu \u0026gt; Tools \u0026gt; Extensions \u0026gt; Click on the Options link below Feed Notifier.\nNow keep that window open, we need to get your Reader feed now. Open Google Reader. Go to All Items. Then copy the URL of that window. it should be something like -\nhttp://www.google.com/reader/view/#stream/user%2F08435596288051107451%2Fstate%2Fcom.google%2Freading-list Now change that URL a bit. To something like this -\nhttp://www.google.com/reader/atom/user%2F08435596288051107451%2Fstate%2Fcom.google%2Freading-list So you see, I just replaced /view/#stream/ to /atom/ ..\nNow copy the new modified URL, paste it in the Feed URL field of the Feed Notifier extension window you opened earlier. Set refresh interval and other options. Click Save. And that’s it. Now you should be able to see desktop notifications like this every time a new item appears in your Google Reader stream. :)\n","date":1305532740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1305532740,"objectID":"031a4c04a6a64952e98a546c96d9bd38","permalink":"https://bibhasdn.com/posts/2011-05-16-chrome-instant-desktop-notification-of-your-google-reader-feed/","publishdate":"2011-05-16T07:59:00Z","relpermalink":"/posts/2011-05-16-chrome-instant-desktop-notification-of-your-google-reader-feed/","section":"posts","summary":"I know there are hell lot of people out there(like me) who are too lazy to open http://reader.google.com every time for latest news, yet want to stay updated of the news instantly. I made a simple solution for myself.\n","tags":["chrome","desktop","feed","google","notification","reader"],"title":"\"Chrome: Instant Desktop Notification of Your Google Reader Feed\"","type":"posts"},{"authors":null,"categories":null,"content":"So you think Osama is dead. Eh? Read this status message from Obama. :D\n4 days left for exam. So don\u0026#39;t blame me if I\u0026#39;m making stuff like this instead of studying. :P (Inspired from a friend\u0026#39;s SMS though) :)   ","date":1305446340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1305446340,"objectID":"249dbc2e1671c085e085be4761b5d3e2","permalink":"https://bibhasdn.com/posts/2011-05-15-laden-is-dead-is-that-so/","publishdate":"2011-05-15T07:59:00Z","relpermalink":"/posts/2011-05-15-laden-is-dead-is-that-so/","section":"posts","summary":"So you think Osama is dead. Eh? Read this status message from Obama. :D\n4 days left for exam. So don't blame me if I'm making stuff like this instead of studying. :P (Inspired from a friend's SMS though) :)  ","tags":["facebook","fake","status"],"title":"Laden is Dead. Is That So? ;)","type":"posts"},{"authors":null,"categories":null,"content":"To modify MySQL databases using C#.NET or any language using .NET framework, you must first install the MySQL Connector for .NET. You can download it from here. Avoid v6.3.6 for now, as I’ve discussed in a previous post, that version might have some bugs. Go the the previous versions section and download v6.3.4 instead. After you’ve downloaded it, install.\nNow run Visual Studio. Open your project. Go to View menu \u0026gt; Solution Explorer \u0026gt; right click on References \u0026gt; Add References \u0026gt; under the tab .NET, select MySQL.Data \u0026gt; Ok. That’s almost it. Now you’ve added the reference to your project.\nTo start coding, add this line to the top of your source -\nusing MySql.Data.MySqlClient; Now you can write the codes just like you do with SQL server, just add My in front of SQL :P. See the code below for example. I wrote two abstract function for my use.\nprivate string MySQLConnectionString = \u0026#34;SERVER=localhost;DATABASE=db_name;UID=root;PASSWORD=;\u0026#34;; public int mysql_query_execute_noReturn(string query) { Int32 row_affected = 0; try { MySqlConnection con = new MySqlConnection(MySQLConnectionString); if (con.State == System.Data.ConnectionState.Closed) { con.Open(); } MySqlCommand command = new MySqlCommand(query, con); row_affected = command.ExecuteNonQuery(); if (con.State == System.Data.ConnectionState.Open) { con.Close(); } } catch (Exception ex) { } return row_affected; } public DataSet mysql_query_execute_return(string query) { DataSet dataSet = new DataSet(); try { MySqlConnection con = new MySqlConnection(MySQLConnectionString); if (con.State == System.Data.ConnectionState.Closed) { con.Open(); } MySqlDataAdapter dataAdapter = new MySqlDataAdapter(query, con); dataAdapter.Fill(dataSet); if (con.State == System.Data.ConnectionState.Open) { con.Close(); } } catch (Exception ex) { } return dataSet; } You can pass any query string to these functions, mysql_query_execute_noReturn will take a query, execute it and return the number of rows affected. It’s only for queries like INSERT, UPDATE, DELETE etc. And mysql_query_execute_return will take a query, execute it and return a DataSet containing all the records. It’s for queries like SELECT.\nSo, try it out. :)\n","date":1304755140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1304755140,"objectID":"c0c213441c5d417ea037e267f9ca83f2","permalink":"https://bibhasdn.com/posts/2011-05-07-modifying-mysql-database-using-c-net/","publishdate":"2011-05-07T07:59:00Z","relpermalink":"/posts/2011-05-07-modifying-mysql-database-using-c-net/","section":"posts","summary":"To modify MySQL databases using C#.NET or any language using .NET framework, you must first install the MySQL Connector for .NET. You can download it from here. Avoid v6.3.6 for now, as I’ve discussed in a previous post, that version might have some bugs. Go the the previous versions section and download v6.3.4 instead. After you’ve downloaded it, install.\n","tags":[".net","c#","database","function","mysql","query","sql"],"title":"Modifying MySQL Database using C#.NET","type":"posts"},{"authors":null,"categories":null,"content":"There was a time when a domain name was enough for any business or product for their web presence. We were happy with www.McAfee.com or www.Amazon.com .. But the scenario is different now. It seems we can’t be satisfied with just the domain name now. We also want @McAfee or @Amazon. Or rather those brands need them even more than a website now.\nI recently tried out a forum website AndroidHelps.com and someone referred me to WooRank.com to check some rank and stuff about the website. So, there I noticed that they also check the twitter handle on the given domain name for calculating rank! I immediately went to twitter and registered the handle @AndroidHelps .. And now I’ve ensured that when (and If) my site (ever) become popuplar, i’ll have the web covered with a website, a blog and a twitter account.\nSo, things have come to this. We’re so much into twitter now(not everyone though, but those who ‘make’ things popular, always keep an eye on their timeline), that we cannot think about advertising or promoting a brand without a twitter account. The equation is now, No. of Followers is proportional to the popularity of the service or product. Maybe one or two of you will disagree, but be sure, a hundred more will be agreeing as they read this.\n","date":1304755140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1304755140,"objectID":"8284ba357cc97006d78c09932905376b","permalink":"https://bibhasdn.com/posts/2011-05-07-only-domain-name-is-not-enough/","publishdate":"2011-05-07T07:59:00Z","relpermalink":"/posts/2011-05-07-only-domain-name-is-not-enough/","section":"posts","summary":"There was a time when a domain name was enough for any business or product for their web presence. We were happy with www.McAfee.com or www.Amazon.com .. But the scenario is different now. It seems we can’t be satisfied with just the domain name now. We also want @McAfee or @Amazon. Or rather those brands need them even more than a website now.\nI recently tried out a forum website AndroidHelps.com and someone referred me to WooRank.com to check some rank and stuff about the website. So, there I noticed that they also check the twitter handle on the given domain name for calculating rank! I immediately went to twitter and registered the handle @AndroidHelps .. And now I’ve ensured that when (and If) my site (ever) become popuplar, i’ll have the web covered with a website, a blog and a twitter account.\n","tags":["business","domain","product","twitter","web"],"title":"Only Domain Name Is Not Enough","type":"posts"},{"authors":null,"categories":null,"content":"My final year project requires both the use of .NET and PHP/MySQL. For some certain process, I needed to connect to the MySQL database from the .NET desktop app.\nSo I searched a bit and saw that MySQL provides several connectors to connect to MySQL database using various languages or platforms, e.g. there are connectors for ODBC(for Windows, Linux, Mac OS X, and Unix platforms), Java platform, .NET platform, MXJ(MBean for embedding the MySQL server in Java applications), C and C++ language and even for OpenOffice.org products! Seemed cool. went ahead and downloaded the latest stable version 6.3.6 of the .NET connector. But when I tried to install it, the installation failed unexpectedly. There were no error log for me to analyze and take step. Only this error message from the installer -\n[caption id=\u0026#34;\u0026#34; align=“aligncenter” width=“510” caption=“MySQL Connector/NET installation error”][/caption]\nNow I searched for the solution, went to the MySQL dev forum, but couldn’t find a solution that worked. So I assumed that this installer is faulty, hence downloaded the immediate previous version 6.3.4 and tried to install it. Now it installed without any problem. Tried connecting from the .NET app, worked cool.\nSo it’s pretty much clear that the 6.3.6 installer has some glitch that needs to be worked on. Hope they fix it soon.\n","date":1304668740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1304668740,"objectID":"3064243811a552853b701ca8cd723216","permalink":"https://bibhasdn.com/posts/2011-05-06-mysqls-connector-for-net-v6-3-6-has-bugs-it-seems/","publishdate":"2011-05-06T07:59:00Z","relpermalink":"/posts/2011-05-06-mysqls-connector-for-net-v6-3-6-has-bugs-it-seems/","section":"posts","summary":"My final year project requires both the use of .NET and PHP/MySQL. For some certain process, I needed to connect to the MySQL database from the .NET desktop app.\n","tags":[".net","connect","database","mysql"],"title":"MySQL's Connector for .NET v6.3.6 has bugs it seems","type":"posts"},{"authors":null,"categories":null,"content":"One of my basic beliefs - Regular Expression is God-Gifted.. Its hard to find something that can be so simple but so much useful.. All for these reasons, I end up using RegEx whenever I have some pattern matching business. And for that to be perfect, I need a cool RegEx validator.\nMost of the times, I use the validator from GSkinner - http://gskinner.com/RegExr/ ..\nIt\u0026#39;s built with flash. Have a cool interface. There are a lot of inbuilt patters you can use or try out. You can also save your own patterns. It have options to test both matching of patterns and replacing using patterns.\nAnd to add to all this, it has a desktop version you can download and use right away! Sweet! :)\n","date":1304063940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1304063940,"objectID":"27016eb73ac0595a2cfcfa44efbabcc3","permalink":"https://bibhasdn.com/posts/2011-04-29-validating-regular-expression/","publishdate":"2011-04-29T07:59:00Z","relpermalink":"/posts/2011-04-29-validating-regular-expression/","section":"posts","summary":"One of my basic beliefs - Regular Expression is God-Gifted.. Its hard to find something that can be so simple but so much useful.. All for these reasons, I end up using RegEx whenever I have some pattern matching business. And for that to be perfect, I need a cool RegEx validator.\n","tags":["flash","regex","regular expression"],"title":"Validating Regular Expression","type":"posts"},{"authors":null,"categories":null,"content":"Received my appointment letter last night. Will be joining Persistent Systems Ltd as a Software Engineer. Have to leave for Nagpur in September..\nThis will be my third time leaving a hometown and shifting to another. And it wasn’t easy the first two times. Wondering how I’m going to manage this time..\nFirst time I left shifted from one city to another, I was a little kid of 7-8 years. So almost felt nothing as I had new enjoyments, new toys to play with in the new city. Second time, it was a bit hard. Left all my relatives, my cousins, my school friends. But as I found later, I’m extremely good in adapting with a new situation. I can blend in to a new environment really fast. Without anyone noticing it. So handled it somehow.\nBut, what about this time?\nIts different. I have to leave my city, the City of Joy, away from my family, friends, inspirations, my love.. How can I adjust without them..?\nI’m hoping for the best till now. For years, I’ve made friends with people around the country. I’ve been friends with few great people from Nagpur. I’m hoping that I’ll be just fine with them around.\nBut still.. How.. Can’t figure. Leaving things to the hands of time. Lets see.\nP.S. - Sorry for getting all emotional.. But can not help. :(","date":1303804740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1303804740,"objectID":"b4a4489e5ae370ff2835ea108dab9fd4","permalink":"https://bibhasdn.com/posts/2011-04-26-how-do-you-leave-your-home-again/","publishdate":"2011-04-26T07:59:00Z","relpermalink":"/posts/2011-04-26-how-do-you-leave-your-home-again/","section":"posts","summary":"Received my appointment letter last night. Will be joining Persistent Systems Ltd as a Software Engineer. Have to leave for Nagpur in September..\n","tags":["city","job","kolkata","leave","nagpur"],"title":"How Do You Leave Your Home, Again?","type":"posts"},{"authors":null,"categories":null,"content":"This is something new I saw today.\nWhile posting a comment in Facebook, for some unknown reason, it couldn’t be posted so facebook showed an error message and also provided a “Try Again” button!\nMaybe it has been there for sometime, but never encountered it..!\n","date":1301644740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1301644740,"objectID":"52fa5e8e2acc0a0769602ad156282d89","permalink":"https://bibhasdn.com/posts/2011-04-01-facebooks-comment-posting-failure-error-handler/","publishdate":"2011-04-01T07:59:00Z","relpermalink":"/posts/2011-04-01-facebooks-comment-posting-failure-error-handler/","section":"posts","summary":"This is something new I saw today.\nWhile posting a comment in Facebook, for some unknown reason, it couldn’t be posted so facebook showed an error message and also provided a “Try Again” button!\nMaybe it has been there for sometime, but never encountered it..!\n","tags":["comment","error","facebook"],"title":"Facebook's Comment Posting Failure Error Handler","type":"posts"},{"authors":null,"categories":null,"content":"Google recently introduced a new feature to be used with their search engine, sort of a plugin you can say, calling it the +1 button.. Now those of us who use internet forums, know very well what is the value of those two letters -\u0026gt; +1. Google took that idea and implemented it in their search engine.\nGoogle says,\nSometimes it’s easier to find exactly what you’re looking for when someone you know already found it. Get recommendations for the things that interest you, right when you want them, in your search results. So, basically it works like a recommendation system. You can also put the +1 button on your website and ask the visitors to +1 it if they like it. Now according to Google, this +1 is going to also affect your search results. Google is going to store the recommendation of the people from your network and give those results preferences that others.. Ummm, but wait, what do they mean by people in your network? As they mentioned, it means -\nPeople in your Gmail (or Google Talk) chat list. People in your My Contacts group in Google Contacts. People you’re following in Google Reader and Google Buzz. Now that\u0026#39;s interesting.. It means that, if some people from your network starts spamming with the +1 button(which is quite possible with the number of SEOs, pseudo-SEOs and Punks around), you’ll start missing good results.. That is real concern.\nWell, one solution that I thought should be considered, it to introduce a -1 button too.. Meaning that you can prioritize and deprioritize your results according to your choice.. With only +1 button, you’ll have to +1 almost 9 search results if you want an unwanted result to be removed which is at position one.. That’s lame.. :-/\n","date":1301644740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1301644740,"objectID":"c3039502ab79bef590fe60713c1bf61e","permalink":"https://bibhasdn.com/posts/2011-04-01-googles-1-button-and-my-view-on-it/","publishdate":"2011-04-01T07:59:00Z","relpermalink":"/posts/2011-04-01-googles-1-button-and-my-view-on-it/","section":"posts","summary":"Google recently introduced a new feature to be used with their search engine, sort of a plugin you can say, calling it the +1 button.. Now those of us who use internet forums, know very well what is the value of those two letters -\u003e +1. Google took that idea and implemented it in their search engine.\n","tags":["+1","button","google","search"],"title":"Google's +1 Button and My View on it","type":"posts"},{"authors":null,"categories":null,"content":"I’ve been added to the KWS Facebook group for sometime. And being an amateur(read nOOb) photographer, I always wanted to meet others who are just like me or more expert and learn from them. Hence a photowalk was always welcome to me. So when I learned that KWS is going to hold a photowalk at West Bengal State Handicraft Expo 2011 at Milan Mela ground, I really wanted to join and started poking Kuntal for his secondary camera(Nikon Coolpix P90) for a day as I don’t have a camera myself. Well, luckily Kuntal managed it somehow and on that day, we went to the venue together.\nWe were supposed to meet in front of the Science city gate on EM Bypass. But me and Kuntal were a bit late, so we couldn’t find anyone there and decided to enter the fair. I’ve already implied that fact that this was my first photowalk with KWS, everyone was stranger to me. But Kuntal seemed to know some of them and noticed where they are the moment we entered the fair, all I saw was a bunch of people with cameras in their hands and only one almost-known face, that was Prasun da(recognized him from his Flickr account DP). Although I heard about Anirban Brahma from some friends who personally know him, but we never met before.\nThe fair premise was pretty huge for a fair like that. And the sun was almost above head as it was about 2pm. I felt myself that the light was too harsh for capturing something outdoor. So we started wandering around just to pass the time and let the sun drop a li’l bit.\nAs time passed, more and more people started gathering for KWS. I was wondering how many exactly are gonna turn up. And the number wasn’t small. Wherever I went, I saw a face from KWS and some more people with cameras who weren’t with us.\nSo I took out that camera of mine, and started capturing. This was the first time I was using a P90(I usually use a Canon S5-IS from another friend), so took some time to familiarize myself with it. There were a LOT to capture. The fair was full of subjects - drawings, ornaments, decorative stuffs and (my personal favorite) People!\nLot of people, everyone was busy. The vendors were working on their show-pieces, one artist was drawing a portrait of a girl, the kids of the vendors were playing around, the people who came to the fair were busy bargaining, other photographers were capturing things with interesting poses etc etc..\nSuddenly saw Anirban Saha there. I didn’t actually know that he was a semi-regular with KWS. He was shooting interesting stuff too. Showed me some, liked ’em.\nIn a gist, it was a pretty interesting place when you’ve got a camera with you. I didn’t even realize when the time was up, sun was setting and suddenly the group members started calling for me, I get that its the group pic time. Now here I met everyone that were present that day. Amitava told us an interesting story where he was held by police for capturing photos, Mriganka was a all-smile boy, Abhijit and Anirban were calling for those who weren’t present and a LOT of things.. The number was pretty high, about 27. It’s a KWS attendance record I think. When we gathered up, I got some new faces to capture. Posted one(of Tania Sarcar) in the KWS pool. Anyway, we got a great group pic. You can see it below(I’m the second right standing one with white t-shirt :).\nThe later plan was to go visit China town and have some snacks, but It would’ve been a li’l bit overkill for my pocket, so decided to head back for home. Kuntal was also up for returning home. So we left saying good bye to all those who stayed.\nNow I should write a conclusion. But I can’t find any. The only thing in my mind is the next KWS meet. Waiting for another rocking day. :)\n","date":1299225540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1299225540,"objectID":"f4300648790af8907ea3e025afb8bab6","permalink":"https://bibhasdn.com/posts/2011-03-04-a-day-with-kws-kolkata-weekend-shoots/","publishdate":"2011-03-04T07:59:00Z","relpermalink":"/posts/2011-03-04-a-day-with-kws-kolkata-weekend-shoots/","section":"posts","summary":"I’ve been added to the KWS Facebook group for sometime. And being an amateur(read nOOb) photographer, I always wanted to meet others who are just like me or more expert and learn from them. Hence a photowalk was always welcome to me. So when I learned that KWS is going to hold a photowalk at West Bengal State Handicraft Expo 2011 at Milan Mela ground, I really wanted to join and started poking Kuntal for his secondary camera(Nikon Coolpix P90) for a day as I don’t have a camera myself. Well, luckily Kuntal managed it somehow and on that day, we went to the venue together.\n","tags":["kolkata","kws","photography","photowalk"],"title":"A Day with KWS(Kolkata Weekend Shoots)","type":"posts"},{"authors":null,"categories":null,"content":"The first thing I noticed after installing Fedora 14 was that there are updates available for my packages. And not a few, more than 400 updates! Sizing about 500mb!\nNow, I use a lame internet plan of 256kbps. Updating all the packages in one go will make me keep this system on for about 5 hours. Thats not possible for me. So I needed a way to update few packages everytime and keep doing that whenever I find time.\nNow I can open the update manager, untick about 350 package the first time to update first 50 package and go on like that.. Sounds ridiculous, right? So ticking-unticking aint an option, lets look for something new.\nTerminal is always there, lets use it. I thought of using conditions with the yum command. Like defining a number, so that first that number of packages will be updated. But that’d most probably require me to write a complicated shell script which I’m not intending to do right now.\nNext option, lets try to find if any condition can be applied to packages’ name and update only the matching ones. This idea seem to have an easy way to deploy. I found that you can use wildcard (*) to the yum update command. Now that’s cool! it lets me to select packages based on a portion of their name. Like, if I want to update only the packages that start with a, all I need to do is use this command -\n# yum update a* Or if I want to update all the packages that has the phrase py in them, I’d use the command -\n# yum update *py* I can also define more than one condition with a space as delimiter, like -\n# yum update \u0026#39;a*\u0026#39; \u0026#39;*bas*\u0026#39; That’s it! I got my way to update few packages at a time. :D\nNote: Before using Yum, install the yum plugin yum-fastestmirror. Saves time finding the the mirrors that\u0026#39;ll transfer data faster. :)","date":1298707140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1298707140,"objectID":"6a9af0ce6a68801905f07339a9d8ec55","permalink":"https://bibhasdn.com/posts/2011-02-26-selective-conditional-update-with-yum/","publishdate":"2011-02-26T07:59:00Z","relpermalink":"/posts/2011-02-26-selective-conditional-update-with-yum/","section":"posts","summary":"The first thing I noticed after installing Fedora 14 was that there are updates available for my packages. And not a few, more than 400 updates! Sizing about 500mb!\nNow, I use a lame internet plan of 256kbps. Updating all the packages in one go will make me keep this system on for about 5 hours. Thats not possible for me. So I needed a way to update few packages everytime and keep doing that whenever I find time.\n","tags":["bash","condition","fedora","shell","terminal","update","yum"],"title":"Selective/Conditional Update with Yum","type":"posts"},{"authors":null,"categories":null,"content":"Reading the title may make you feel it’s pretty simple - Download the flash player rpm package from adobe.com, install it and Done. I thought so too. But even if flash-plugin was installed, Firefox wasn’t detecting it. So did some old-style googling, and came up with these commands.\nRemember, my one is Fedora 14 x86_64, it might not work for other versions.\nStep 1. Open Terminal and go to Root user mode su - Enter password: Step 2. Install Adobe YUM Repository RPM package rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux Step 3. Update Repositories(Optional, Do if you haven\u0026#39;t done it recently) yum check-update Step 4. Install required packages yum install flash-plugin nspluginwrapper.x86_64 nspluginwrapper.i686 alsa-plugins-pulseaudio.i686 libcurl.i686 This command should also work on Fedora 13, Fedora 12 and Red Hat (RHEL) 6 64-bit version (x86_64) (32 bit wrapped version).. That\u0026#39;s it. Restart Firefox and you should be able to run Flash stuff. Head for Youtube to test it.","date":1298620740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1298620740,"objectID":"8b36ad7ded4927d48a6309446a45fce4","permalink":"https://bibhasdn.com/posts/2011-02-25-install-adobe-flash-player-10-2-on-fedora-14-x86-64/","publishdate":"2011-02-25T07:59:00Z","relpermalink":"/posts/2011-02-25-install-adobe-flash-player-10-2-on-fedora-14-x86-64/","section":"posts","summary":"Reading the title may make you feel it’s pretty simple - Download the flash player rpm package from adobe.com, install it and Done. I thought so too. But even if flash-plugin was installed, Firefox wasn’t detecting it. So did some old-style googling, and came up with these commands.\n","tags":["14","command","fedora","flash","player","rhel","terminal","x64","x86"],"title":"Install Adobe Flash Player 10.2 on Fedora 14 x86_64","type":"posts"},{"authors":null,"categories":null,"content":"If you’ve read my blog before, you’ll know that I keep attending all the tech/web related events here. Thankfully, I’ve been able to collaborate with many active faces here and also brought together few more in that list. Yesterday (20th Feb ‘11) was a day full of fun and cheers coming from each and everyone.. Two Major bloggers’ meet on a single day. Heck, whattay day it was!\nAt the indiBlogger meet, there was a social networking session, where everyone has been given a white paper which they can hang on their back and go to other people, talk to them, introduce self and ask for a comment.. It was a really interesting session. Loved it. My piece of paper was full of comments written by people I hardly know, and also some people I’m lucky to know.. I’m gonna share the comments here, because I want to remember them. For an eternity..\nSomeone: Bibhas(in Bengali), meeting you was an experience. Someone: Bibhas, tu bahoot bara programmer bane. [Whoever you are, Thanks a LOT for the wish. :) ] Agnivo da wrote: Biriyani Tweetup koboe hobe? :D [There\u0026#39;s a story behind it, will share later after I have that tweetup. :P] Subham Singh wrote: Good blogger, keep up the good work. [Thanks Dude :)] Someone: Dont be DUMB! [To the writer, \u0026#34;Ok, Sire.\u0026#34; :) ] Someone: THE SOCIAL FREAK! :) [yeah, I know. :P ] Someone: Why did you get a white chat? :P [because I had a white sheet, whereas most had a yellow one.] Someone: bibhas rocks!! (^_^) [Thanks dude, who ever you are.. :) ] Someone: Aspiring Developer :) Arijit wrote: You are cool - @warijit [Thanks bro. :) ] Someone: keep blogging. [I will. :) ] Some R.G. wrote: Nice blog u have. Gimme some suggestions. Teach me to cheat!! [Heck Dude.. That was odd! O_O] Debojyoti wrote: All the best in Life. God Bless.. [Thanks dude. :) ] Someone: Keep Sleeping!! [o_O] Someone: The Whitehat Blogger.. [ :) ] And my favorite - Debleena di wrote: A Techie.. who is there on the web.. everywhere... [ Thanks Di.. :) ] This is the exact reason I love networking.. People are like pieces of puzzles. You can build a great picture when you bring them together.. So, keep networking.. :) P.S. If you wrote any of them, please comment and let me know.. :)","date":1298275140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1298275140,"objectID":"c537cf68954b0133b36b060edd450a7c","permalink":"https://bibhasdn.com/posts/2011-02-21-comments-from-known-faces-unknown-faces/","publishdate":"2011-02-21T07:59:00Z","relpermalink":"/posts/2011-02-21-comments-from-known-faces-unknown-faces/","section":"posts","summary":"If you’ve read my blog before, you’ll know that I keep attending all the tech/web related events here. Thankfully, I’ve been able to collaborate with many active faces here and also brought together few more in that list. Yesterday (20th Feb ‘11) was a day full of fun and cheers coming from each and everyone.. Two Major bloggers’ meet on a single day. Heck, whattay day it was!\nAt the indiBlogger meet, there was a social networking session, where everyone has been given a white paper which they can hang on their back and go to other people, talk to them, introduce self and ask for a comment.. It was a really interesting session. Loved it. My piece of paper was full of comments written by people I hardly know, and also some people I’m lucky to know.. I’m gonna share the comments here, because I want to remember them. For an eternity..\n","tags":["bloggers","comment","meetup"],"title":"Comments from Known faces, Unknown faces","type":"posts"},{"authors":null,"categories":null,"content":"This blog post is only for me to remember that what happened, was the last thing I expected..\n5th February, 2011. I woke up like any other day, early, to go for my driving lessons, drove pretty well, returned home expecting my friend Nishan to call me and say that I was late. We were supposed to leave early for Netaji Subhas Engg College for our campusing process with Persistent Systems Ltd. Well, eventually, we both were late. But I tried to keep up with the schedule. Got ready really fast. In my mind, I was going for an outing. Was pretty sure I’m not gonna clear the aptitude test among all those 800+ students. So I didnt wear my blazer, I didnt shave, didnt wear a good shirt. And left for the destination.\nWe reached the college, waited for about 2 hours as there were already half of the number inside the college appearing the test. When that batch came out, my friends were all asking them what were all the question, how to answer the tough ones. Some started revising quick. I was just standing there, planning to go to the book fair after we appear in the written test.\nSo our time came, we entered the hall, first the aptitude question paper was distributed. It had 60 MCQs. I had 1 hour in hand. And the question were pretty easy. So attended about 57. I was 100% sure about 50-53 of them. Then after the hour, came the subjective paper. It had a C program, which asked the students to write a program to read another C source file and remove all the commented lines from it. And there was another question asking the students to explain a sentence. Something about India being a field of opportunity or something. I dont remember because I didn’t even think of attending it. I knew the algo required for the C program. I was just lacking some syntaxes(its been really long since I tried C). But I thought, WTH! I can make up syntaxes with ease. :P\nSo started writing the code, and where it was a bit complex, kept commenting them. after half an hour, they took the paper, I submitted it with a lot of bugs, but the maintained the logic. Left the room and the waiting started. :-/\nThey were supposed to declare the result in about half an hour. But it took them about 2 hours in total to come up with the names!! During then, I was planning to visit Book fair and South City mall with my friends. And was waiting when they’d declare the result, so that we can leave early..\nThen after sometime, which seemed like an year to me, they appeared in front of us and started reading the names.\n5 names, 10 names, 15 names, 20 names, 25 names … And on the 28th, I heard something like “Bibhas Chandra Debnath from Narula Institute of Technology”.. I was one of the 33 who cleared the aptitude test. And my friends were like “Woooooot”! And the first word I spoke was WTF, excluding the WT part.. :-/\nLater part of the story - They had 3 interviews(Two technical round and one HR round). The first technical round was supposed to start from 6:30. But it started at 9:30 for me. (Remember, I didn’t have lunch. :-/) then they called me, went and answered all the questions which were on basic of C, DS and some theories on Windows. Then again started waiting for the 1st round result.. I was so exhausted that I was ready to leave before the 1st round result was declared. But then suddenly they came, asked me to go for the 2nd round.. I was again like wtf!..\nWent anyway. Answered all the questions related to my projects. Asked them something about the slides they showed me, and left. Again started waiting. Then they came with a form and said that I cleared the 2nd technical round. :| And was asked to appear in the HR round.. Appeared. The HR asked me to wait half an hour for the final result.\nAfter half an hour, it was almost 12 midnight. The HR came out, with 7 envelops. Announced 6 names. then suddenly called my name.!. Another wtf moment people.. And said, “See you in Nagpur.” .. I was smiling.. What else could I do? The only thing that came in my mind was, “I did not come here for all these and I couldn’t go to the Book fair with my friends..” :(\nP.S. - Just to complete the story, only these 7 were selected finally.","date":1296979140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1296979140,"objectID":"15107f8f9d5fc8b237fd5429c9aa88b3","permalink":"https://bibhasdn.com/posts/2011-02-06-and-they-called-my-name/","publishdate":"2011-02-06T07:59:00Z","relpermalink":"/posts/2011-02-06-and-they-called-my-name/","section":"posts","summary":"This blog post is only for me to remember that what happened, was the last thing I expected..\n","tags":["job","odd","persistent"],"title":"And They Called My Name","type":"posts"},{"authors":null,"categories":null,"content":"Kolkata is usually not very frequent when it comes to organizing Tech related events. mostly because that crowd is very small every time someone tries something. But despite that, I’ve been trying to attend as many events possible and bring then together, so that everytime we can have atleast some new faces. That is actually how the crowd grows.\nSo when I came to know about this “Fedora 14 Realease Party” on 2nd February via Facebook, I was interested and despite some trouble, went ahead and attended it. And I must say, It’s been a memory to remember for sometime. :)\nThe main attraction of the event for me was the speech from Mr. Indranil Das Gupta and the proposed speech on ‘KDE-EDU : Using, Learning, Contributing’ by Mrs Stephenie Das Gupta. The main reason was that I’ve known Indranil da from sometimes now, but could never attend his speech and I really wanted to. And for Stephenie, I’ve seen her in action before, but never had the chance to get familiar to her. So here was my chance. :)\nThe venue, Government College of Engineering \u0026amp; Ceramic Technology or GCECT, is a well known Govt Engineering college in West Bengal. They had a big space. But however might the event have been, I have to give them kudos for they had a good number of students attend the seminar. More would have been netter, but I think they’ll learn from this event.\nFor some problems in the college during the event, only the speech By Indranil da was performed, and the speech by Stephenie had to be discarded. But I have to say, I enjoyed Indranil da’s speech. He actually knew how to engage the type of students that were sitting infront of him and he proceeded that way. I loved the way he demonstrated that how we’re all one way or another using Free and Open Source Softwares or FOSS, and How we’re going to realize their importance when we actually run out of them. One little example of this was his “Breath-Holding” experiment(I made up the name :P ). He asked a girl from the audience and a boy with a wrist watch. Then he asked the girl to hold her breath as long as she can. That boy had the count, she could hold it for about 40 seconds. And had to give up as it was impossible for her to continue without air.. Now compare the Air with the FOSS we’re using in our daily life, we’re using them even not knowing when we’re doing that, just like we breath. And once we run out of them, we’re definitely gonna suffocate.\nFor people interested in how to earn through FOSS, he gave some interesting live examples of how people are already doing that and earning even more then the ones not working with FOSS. I’ll talk about it more later.\nAlthough this was supposed to be a “Fedora Release Party”, it actually ended up being a “Fedora Activity Day” as Fedora 14 was released exactly 3 months before the event, and it was unethical to call it a release party. :) I left early, so I didnt get the Fedora 14 disc, but I’m sure the other attendants got theirs. :)\nHere are some pics from the event. Might give you a picture of what happened. :) ","date":1296806340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1296806340,"objectID":"99396d4b7526eba27b766b9f41c9e14c","permalink":"https://bibhasdn.com/posts/2011-02-04-a-fedora-day-at-gcect-kolkata/","publishdate":"2011-02-04T07:59:00Z","relpermalink":"/posts/2011-02-04-a-fedora-day-at-gcect-kolkata/","section":"posts","summary":"Kolkata is usually not very frequent when it comes to organizing Tech related events. mostly because that crowd is very small every time someone tries something. But despite that, I’ve been trying to attend as many events possible and bring then together, so that everytime we can have atleast some new faces. That is actually how the crowd grows.\nSo when I came to know about this “Fedora 14 Realease Party” on 2nd February via Facebook, I was interested and despite some trouble, went ahead and attended it. And I must say, It’s been a memory to remember for sometime. :)\n","tags":["event","fedora","foss","gcect","kolkata"],"title":"A Fedora Day at GCECT, Kolkata","type":"posts"},{"authors":null,"categories":null,"content":"Being a PHP developer myself, I know how hard a work might get if you don’t know about functions that are appropriate to the situation. So, I thought of building a service that will let people discover new functions everyday, right on their wall(in case of Facebook) or timeline(in case of Twitter).\nSo I built PHPrefX. A service that keeps posting the name of a function, a short info and the link to the reference of that function once every hour on Twitter and Facebook. If people show interests, I will add an email subscription system too. But that’s for a near future. :)\nFor Twitter users, Please follow @phprefx. Facebook users can head for the Fan page of PHPrefX.\nAnd DO let me know if you like it and if you need any changes made. :)\n","date":1295510340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1295510340,"objectID":"f3a9b790e6341fb106a392f671432eed","permalink":"https://bibhasdn.com/posts/2011-01-20-php-enthusiast-discover-new-functions-right-on-your-timelinewall/","publishdate":"2011-01-20T07:59:00Z","relpermalink":"/posts/2011-01-20-php-enthusiast-discover-new-functions-right-on-your-timelinewall/","section":"posts","summary":"Being a PHP developer myself, I know how hard a work might get if you don’t know about functions that are appropriate to the situation. So, I thought of building a service that will let people discover new functions everyday, right on their wall(in case of Facebook) or timeline(in case of Twitter).\nSo I built PHPrefX. A service that keeps posting the name of a function, a short info and the link to the reference of that function once every hour on Twitter and Facebook. ","tags":["facebook","php","twitter"],"title":"PHP Enthusiast? Discover new Functions Right on Your Timeline/wall","type":"posts"},{"authors":null,"categories":null,"content":"Here are the ones who attended the Meetup and made it such joyous.. :)\nKuntal Gupta Twitter: @cybercool10 Facebook: http://fb.me/cybercool10 Aritra Maulik Twitter: @_neophile Facebook: http://fb.me/aritra.mk Rajesh Pandey Twitter: @ePandu Facebook: http://fb.me/eRajesh Ashish Mohta Twitter: @ashishmohta Facebook: http://fb.me/ashishmohta Ramanuj Mukherjee Twitter: @bluishbottle Facebook: http://fb.me/ramanujm Rabimba karanjai Twitter: @rabimba Facebook: http://fb.me/rabimba Mitesh Ashar Twitter: @iMBA Facebook: http://fb.me/miteshashar Sourav Ghosh Twitter: @souravghosh Facebook: http://fb.me/souravghosh Kirtika Sanyal \u0026amp; her friend Somrita Twitter: @kirtikasanyal Aritra Sen Twitter: @aritrasen Facebook: http://fb.me/aritrasen87 Shilpa Srivastava Twitter: @shilps31 Facebook: http://fb.me/shilpa.srivastava Ulhas Vardhan Golchha Twitter: @golchha21 Facebook: http://fb.me/golchha21 Sanjib Chakravorty Twitter: @isanzc Facebook: http://fb.me/sanjibc Gourab Sanyal Twitter: @g0UrAb Abhishek Adhikary Twitter: @avii13 Facebook: http://fb.me/abhishek.adhikary13 Me Twitter: @iAmBivas Facebook: http://fb.me/iambibhas ","date":1293782340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1293782340,"objectID":"831bbb031a5aa29bff5a171a52ff908a","permalink":"https://bibhasdn.com/posts/2010-12-31-year-ending-kolkata-meetup-10/","publishdate":"2010-12-31T07:59:00Z","relpermalink":"/posts/2010-12-31-year-ending-kolkata-meetup-10/","section":"posts","summary":"Here are the ones who attended the Meetup and made it such joyous.. :)\n","tags":["2010","meetup","tweetup"],"title":"\"Year Ending Kolkata Meetup \\xE2\\x80\\x9910\"","type":"posts"},{"authors":null,"categories":null,"content":"We decided to meet up once before the year ends and have a quality time. Some of us are gonna tweet live from the spot. So I thought this would help to track the tweets. :) So, its just a Live stream for following the tweets made from the Event spot. :)\n","date":1293695940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1293695940,"objectID":"b06d85f9a2e1a34bb16b04c5b02ca385","permalink":"https://bibhasdn.com/posts/2010-12-30-year-ending-meetup-tweets/","publishdate":"2010-12-30T07:59:00Z","relpermalink":"/posts/2010-12-30-year-ending-meetup-tweets/","section":"posts","summary":"We decided to meet up once before the year ends and have a quality time. Some of us are gonna tweet live from the spot. So I thought this would help to track the tweets. :) So, its just a Live stream for following the tweets made from the Event spot. :)\n","tags":["2010","facebook","meetup","tweet","tweetup"],"title":"Year Ending Meetup - Tweets","type":"posts"},{"authors":null,"categories":null,"content":"If you use Wordpress for managing your blog or CMS, then you know how it automatically generate the permalink of a post when you just provide the title of the post. It takes the Title, removes special characters or replaces them with a hyphen(-).\nNow, I was working on a project which required a news submission to Google news, for which I needed to fix an arbitrary 3 or more digit number to the permalink(Google requirement). So one way of doing that was to manually edit it each time i wrote a post. But that aint possible considering the frequency of posting. So I had to automate the process.\nSo I looked around a bit, had a healthy conversation in StackOverflow but it didn’t work well. So, when I was wandering around the post.php file, I noticed a function named wp_unique_post_slug() which seemed like the solution I needed! That function generates the slug of the post when the post title is passed to it.\nHere is the total function -\nfunction wp_unique_post_slug( $slug, $post_ID, $post_status, $post_type, $post_parent ) { // A Whole Lot of Stuff is done here.. But what we really need is the final line .. // .... return $slug; } So, Just before the generated slug is returned from the function, I made the necessary changes. Like -\nif($slug!=\u0026#34;\u0026#34;){ $random=rand(11111,99999); //I needed 5 digit random $slug .= \u0026#34;-\u0026#34; . $random; } return $slug; And Tada! My Job Done. So now if I give a post title like “Hello World”, for a default Wordpress installation, the permalink generated would be - http://bibhas.in/blog/2010/12/hello-world/ but with my customization, I’d get a permalink like http://bibhas.in/blog/2010/12/hello-world-34523/ .. Where the number 34523 is a random number generated by my added code. :)\nSo this way, you can make changes in your slug any way you want. But be careful when you edit the file. One mistake can literally Hang your blog. :P\n","date":1293177540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1293177540,"objectID":"56e86f2e596d71f4d7071409f213bffd","permalink":"https://bibhasdn.com/posts/2010-12-24-customize-wordpress-automated-permalink-generation/","publishdate":"2010-12-24T07:59:00Z","relpermalink":"/posts/2010-12-24-customize-wordpress-automated-permalink-generation/","section":"posts","summary":"If you use Wordpress for managing your blog or CMS, then you know how it automatically generate the permalink of a post when you just provide the title of the post. It takes the Title, removes special characters or replaces them with a hyphen(-).\nNow, I was working on a project which required a news submission to Google news, for which I needed to fix an arbitrary 3 or more digit number to the permalink(Google requirement). So one way of doing that was to manually edit it each time i wrote a post. But that aint possible considering the frequency of posting. So I had to automate the process.\n","tags":["auto","permalink","php","slug","wordpress"],"title":"Customize Wordpress' Automated Permalink Generation","type":"posts"},{"authors":null,"categories":null,"content":"Just a Live stream for following the tweets made from the Event spot. :)\n","date":1292054340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1292054340,"objectID":"0431beea034b1120b605d995197c1e8f","permalink":"https://bibhasdn.com/posts/2010-12-11-startup-saturday-kol/","publishdate":"2010-12-11T07:59:00Z","relpermalink":"/posts/2010-12-11-startup-saturday-kol/","section":"posts","summary":"Just a Live stream for following the tweets made from the Event spot. :)\n","tags":["kolkata","saturday","startup"],"title":"\"Startup Saturday Kolkata \\xE2\\x80\\x93 Tweets\"","type":"posts"},{"authors":null,"categories":null,"content":"Saw some really Lame posts in Facebook and thought there should be a ‘dislike’ button?\nWell, think again.\nLets face the facts. Facebook is a site for growing your network. Your network necessarily means the people you like and feel comfortable with. (Well, its not always the case. People often keep adding people they dont even intend to communicate. That’s definitely Lame.) Now, in this scenario, introducing a “Dislike” button would also come with some basic social problems.\nEver heard of “Bullying”? Clicking the dislike button is like Bullying over someone. Why? because you’re not even showing reason for disliking. If someone dislike your post, of course you’ll get offended. Its like Someone Shouting in front of a whole bunch of people that he Hates you. (Well, you can understand what people will think about both of you after that.) If you dont like something, just tell him that directly with reasons or just ignore it. When someone publicly dislikes your post, you lose a good amount of respect from others who can see it. (Think about that.)\nAnd also, You think disliking someone else’s post would be Cool? Just give it a thought, How’d You feel if someone dislikes Your post?\nI think that’ll be enough. I made my point.\n","date":1291967940,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1291967940,"objectID":"0c993bd06f21a78332758bb4d6c11151","permalink":"https://bibhasdn.com/posts/2010-12-10-been-wondering-why-facebook-doesnt-have-a-dislike-button/","publishdate":"2010-12-10T07:59:00Z","relpermalink":"/posts/2010-12-10-been-wondering-why-facebook-doesnt-have-a-dislike-button/","section":"posts","summary":"Saw some really Lame posts in Facebook and thought there should be a ‘dislike’ button?\nWell, think again.\n","tags":["dislike","facebook"],"title":"Been Wondering Why Facebook Doesn't Have a 'Dislike' Button?","type":"posts"},{"authors":null,"categories":null,"content":"The other day I was just talking to a friend about the numbering of twitter status IDs. He asked, whats the proof that they started from 1. So, I thought, lets show him.\nHere are the first 50 tweets ever posted. The interesting thing is, There is no tweet with the IDs 0-19.. It all started from 20. I also hyperlinked the tweets, check them out. :)\njust setting up my twttr\n— Jack Dorsey (@jack) March 21, 2006 For the reference, The original project code name for Twitter was twttr. just setting up my twttr\n— Biz Stone (@biz) March 21, 2006 just setting up my twttr\n— noah glass (@noah) March 21, 2006 just setting up my twttr\n— : twitter Support (@crystal) 2:30am 22 mar \u0026#39;06 just setting up my twttr\n— : lacking pretense isn\u0026#39;t always helpful in life. (@Jeremy) 2:30am 22 mar \u0026#39;06 just setting up my twttr\n— : founder of crowdVine. Interested in events, smallbiz, social software. (@Tony Stubblebine) 2:31am 22 mar \u0026#39;06 just setting up my twttr\n— : trazzler, reston, Syracuse university, Sandwich (@adam rugel) 2:31am 22 Mar \u0026#39;06 just setting up my twttr\n— : farm boy from nebraska. Husband and father. co-founder of twitter. (@Evan Williams) 2:32am 22 mar \u0026#39;06 inviting coworkers\n— : creator, Co-founder and Chairman of twitter; CEo of square. (@jack Dorsey) 2:32am 22 Mar \u0026#39;06 getting my odeo folks on this deal\n— : co-founder of Twitter, Inc. (@Biz stone) 2:33am 22 Mar \u0026#39;06 just setting up my twttr\n— : helped create @twitter. Author of @thebook 140 characters, founder @DollarApp, co-founder @iosdevcamp, original @Square merchant. @medialab @Hgse \u0026amp; @Swarthmore. (@Dom sagolla) 2:33Am 22 mar \u0026#39;06 just setting up my twttr\n— : anarchist, ruby hacker, trouble maker (@rabble) 2:34am 22 mar \u0026#39;06 oooooooh\n— : Helped create @twitter. Author of @thebook 140 characters, founder @dollarapp, co-founder @iOSDevcamp, original @square merchant. @mediaLab @HGsE \u0026amp; @swarthmore. (@dom sagolla) 2:37am 22 mar \u0026#39;06 oh shit, i just twittered a little.\n— : lacking pretense isn\u0026#39;t always helpful in life. (@jeremy) 2:38am 22 Mar \u0026#39;06 waiting for dom to update more\n— : creator, co-founder and chairman of Twitter; ceO of square. (@Jack Dorsey) 2:38am 22 mar \u0026#39;06 just setting up my twttr\n— : ceO at infectious. (@Tim roberts) 2:38am 22 Mar \u0026#39;06 waiting for jack to update more first\n— : helped create @Twitter. author of @thebook 140 characters, founder @dollarapp, co-founder @iosDevCamp, original @Square merchant. @mediaLab @hgsE \u0026amp; @Swarthmore. (@dom Sagolla) 2:39am 22 Mar \u0026#39;06 oh this is going to be addictive\n— : Helped create @Twitter. Author of @thebook 140 characters, founder @Dollarapp, co-founder @iosDevcamp, original @Square merchant. @Medialab @Hgse \u0026amp; @swarthmore. (@Dom sagolla) 2:40am 22 mar \u0026#39;06 planning for Sprint #4\n— : ceo at infectious. (@tim Roberts) 2:43am 22 mar \u0026#39;06 wishing i had another sammich\n— : co-founder of twitter, Inc. (@biz Stone) 2:46am 22 Mar \u0026#39;06 just setting up my twttr\n— : (@meredith) 2:47am 22 Mar \u0026#39;06 typing my first message\n— : (@meredith) 2:49am 22 Mar \u0026#39;06 following mer\n— : Helped create @twitter. author of @thebook 140 characters, founder @dollarapp, co-founder @iosDevcamp, original @Square merchant. @MediaLab @hgsE \u0026amp; @swarthmore. (@dom sagolla) 2:50am 22 mar \u0026#39;06 i\u0026#39;ll check back in later\n— : (@meredith) 2:54am 22 Mar \u0026#39;06 having some flowery orange pekoe tea\n— : co-founder of twitter, inc. (@Biz stone) 3:02am 22 Mar \u0026#39;06 setting up my mac mini\n— : ceo at infectious. (@tim Roberts) 3:03am 22 mar \u0026#39;06 lunch\n— : Creator, co-founder and chairman of Twitter; ceO of Square. (@Jack dorsey) 3:13am 22 Mar \u0026#39;06 free lunch\n— : helped create @twitter. author of @thebook 140 Characters, founder @dollarapp, co-founder @iOSdevCamp, original @square merchant. @medialab @hGse \u0026amp; @Swarthmore. (@Dom Sagolla) 3:23am 22 Mar \u0026#39;06 feeling pains in my back\n— : co-founder of twitter, Inc. (@biz stone) 3:24am 22 mar \u0026#39;06 using twttr.com\n— : co-founder of twitter, inc. (@Biz stone) 4:10am 22 mar \u0026#39;06 twttr my nttr\n— : Helped create @twitter. author of @thebook 140 characters, founder @dollarapp, co-founder @iosDevcamp, original @Square merchant. @MediaLab @hgsE \u0026amp; @swarthmore. (@dom sagolla) 4:11am 22 mar \u0026#39;06 going out to do an errand\n— : co-founder of twitter, Inc. (@biz stone) 4:13am 22 Mar \u0026#39;06 already addicted to twttr.com\n— : helped create @twitter. author of @thebook 140 characters, founder @DollarApp, co-founder @ioSdevCamp, original @Square merchant. @mediaLab @hgsE \u0026amp; @swarthmore. (@dom Sagolla) 4:35am 22 Mar \u0026#39;06 high on sugar\n— : Helped create @twitter. author of @thebook 140 characters, founder @dollarapp, co-founder @iosDevcamp, original @Square merchant. @MediaLab @hgsE \u0026amp; @swarthmore. (@dom sagolla) 4:40am 22 mar \u0026#39;06 settling back in\n— : co-founder of twitter, inc. (@Biz stone) 4:52am 22 mar \u0026#39;06 watching connections on flashcom\n— : Founder of crowdVine. interested in events, smallbiz, social software. (@tony stubblebine) 4:54am 22 mar \u0026#39;06 working on smS in\n— : creator, Co-founder and Chairman of twitter; CEO of square. (@jack dorsey) 4:56am 22 Mar \u0026#39;06 just …","date":1291622340,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1291622340,"objectID":"35e6a79de8c18264e3cc572fc45e64cd","permalink":"https://bibhasdn.com/posts/2010-12-06-the-first-50-tweets-ever-posted/","publishdate":"2010-12-06T07:59:00Z","relpermalink":"/posts/2010-12-06-the-first-50-tweets-ever-posted/","section":"posts","summary":"The other day I was just talking to a friend about the numbering of twitter status IDs. He asked, whats the proof that they started from 1. So, I thought, lets show him.\nHere are the first 50 tweets ever posted. The interesting thing is, There is no tweet with the IDs 0-19.. It all started from 20. I also hyperlinked the tweets, check them out. :)\njust setting up my twttr\n","tags":["tweet","twitter"],"title":"The First 50 Tweets Ever Posted","type":"posts"},{"authors":null,"categories":null,"content":"If you develop websites, you’ve definitely came across a site background texture crisis.. I did too, and found myself a pretty sool solution. So am sharing it here. :)\nVisit this Background maker.. Here you can make seamless textures starting from 1x1 pixel to anything you want. Here is a screenshot -\nIf you dont have time for designing yourself, Click the “Gallery” button. There are thousands of ready-made patterns for you to download and use if you lie them. :) You can also save your pattern in this site itself so that you can use it later anytime you need. Go ahead. Try it out. :)\n","date":1291449540,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1291449540,"objectID":"285e125992dde88e5676165863cc314a","permalink":"https://bibhasdn.com/posts/2010-12-04-need-a-seamless-background-texture/","publishdate":"2010-12-04T07:59:00Z","relpermalink":"/posts/2010-12-04-need-a-seamless-background-texture/","section":"posts","summary":"If you develop websites, you’ve definitely came across a site background texture crisis.. I did too, and found myself a pretty sool solution. So am sharing it here. :)\n","tags":["background","seamless","texture"],"title":"Need a Seamless Background Texture?","type":"posts"},{"authors":null,"categories":null,"content":"I started using IRC about 2 months ago. I know its lame of me to get to that stuff so late. But from the very point I logged into a channel, the thing that caught most of my attention was a Bot that used to respond to user command. Now that seemed interesting. I dug some codes in Github, did some Googling and got the idea. Then found a sample snippet of how to create an IRC bot with PHP, at www.thegeeks.us which wasn’t much functional to start with.. I started testing the code and thanks to Ben(spookz), one of the member(and most probably a co-founder too) of thegeeks.us, with some inspiration from him, I got this thing to work.\nI built quite a few commands for myself. But I’d rather not post them in a blog which is pretty much in Google’s reach. :P\nAm posting the code here so that you can customize it and build your own bot with it. The code itself is documented with comments. Still, if you have any type of doubt, don’t hesitate to contact me.\n/* * PHP IRC Bot * Customized by Bibhas. * Get in touch at @bibhasdn in twitter */ //Setting time limit off. We need to run the script until We ask it to exit. set_time_limit(0); //Open socket to server,port $socket = fsockopen(\u0026#34;irc.freenode.net\u0026#34;,6667); //Sends USER HOSTNAME IDENT :REAL NAME Change it as you wish. fputs($socket,\u0026#34;USER PHPBot bibhas.in PHP :The PHP Bot\\n\u0026#34;); //Sends the NICK to server. Choose a unique one or the script will fail. fputs($socket,\u0026#34;NICK php-bot-custom\\n\u0026#34;); //Enter the channel you want to use your bot on. fputs($socket,\u0026#34;JOIN #sample-channel\\n\u0026#34;); //Array of commands you can use. If you create a new command, //it must be enlisted here before it can be used. $commands = array ( \u0026#34;!version\u0026#34;, \u0026#34;!say\u0026#34;, \u0026#34;!tw\u0026#34;, \u0026#34;!g\u0026#34;, \u0026#34;!answerme\u0026#34;, \u0026#34;!restart1\u0026#34;, \u0026#34;!exit1\u0026#34; ); //Sends the script into an infinite loop while (1) { //Recieves the data into $data in 128 bytes. //The bot actually does nothing but receive data users enter in the channel and //respond to it. So, we\u0026#39;ll fetch all the texts entered in the channel and //fetch our required data and respond to it. while($data=fgets($socket,128)) { //puts the data in an array by word //this helps us to identify commands and parameters $get = explode(\u0026#39; \u0026#39;, $data); //Server Pinged us lets reply! if ($get[0] == \u0026#34;PING\u0026#34;) { fputs ($socket, \u0026#34;PONG \u0026#34;.$get[1].\u0026#34;\\n\u0026#34;); } //When someone says somethign in the channel, its fetched in the $get array in the following format //0=\u0026gt;:Zhe_Viking!~chatzilla@117.145.203.189 1=\u0026gt;PRIVMSG 2=\u0026gt;#test_field 3=\u0026gt;:!say 4=\u0026gt;Hello 5=\u0026gt;World. //The following code sets $nick and $chan variables from the text last entered in the channel if (substr_count($get[2],\u0026#34;#\u0026#34;)) { $nick = explode(\u0026#39;:\u0026#39;,$get[0]); $nick = explode(\u0026#39;!\u0026#39;,$nick[1]); $nick = $nick[0]; //User who entered the command $chan = $get[2]; //the channel the bot is in $num = 3; //If you observe the array format, actually text starts from 3rd index. if ($num == 3) { $split = explode(\u0026#39;:\u0026#39;,$get[3],2); $text = rtrim($split[1]); //trimming is important. never forget. //This is where we start processing the commands we entered in earlier if (in_array($text,$commands)) { //switch-case structure, each case sorresponds to each enlisted commands. switch(rtrim($text)) { case \u0026#34;!version\u0026#34;: //PRIVMSG sends our command to the correct channel. fputs($socket,\u0026#34;PRIVMSG $chan : PHP Bot Developed mostly by Bibhas.\\n\u0026#34;); break; case \u0026#34;!tw\u0026#34;: //A command developped by me that fetches the last tweet from the given username $msg=\u0026#34;\u0026#34;; $handle=$get[4]; $msg= get_last_tweet($handle); $msg=html_entity_decode($msg, ENT_QUOTES); fputs($socket,\u0026#34;PRIVMSG $chan :$msg\\n\u0026#34;); unset($msg); break; case \u0026#34;!g\u0026#34;: //Does some google search for you. $arraysize = sizeof($get); $count = 4; $query=\u0026#34;\u0026#34;; $result=\u0026#34;\u0026#34;; while ($count \u0026lt;= $arraysize) { $query = $query.\u0026#34; \u0026#34;.$get[$count]; $count++; } $result=from_google($query); $result=html_entity_decode($result, ENT_QUOTES); fputs($socket,\u0026#34;PRIVMSG $chan :$nick =\u0026gt; $result\\n\u0026#34;); unset($result); break; case \u0026#34;!say\u0026#34;: //it usually repeats the stuff you give as parameter. // but i used it to print the whole input array for testing purpose. $arraysize = sizeof($get); //1,2,3 are just nick and chan, 4 is where text starts $count = 0; $saytext=\u0026#34;\u0026#34;; while ($count \u0026lt;= $arraysize) { $saytext = $saytext.\u0026#34; \u0026#34; . $count . \u0026#34;=\u0026gt;\u0026#34;.$get[$count]; $count++; } echo $saytext . \u0026#34; \u0026#34;; $saytext = \u0026#34;Array Size $arraysize \u0026#34; . $saytext; fputs($socket,\u0026#34;PRIVMSG $chan :$saytext\\n\u0026#34;); unset($saytext); break; case \u0026#34;!answerme\u0026#34;: //A Yahoo answers integration. $arraysize = sizeof($get); $count = 4; $query=\u0026#34;\u0026#34;; $result=\u0026#34;\u0026#34;; while ($count \u0026lt;= $arraysize) { $query = $query.\u0026#34; \u0026#34;.$get[$count]; $count++; } $query=trim($query); $result=trim(answerMe($query)); fputs($socket,\u0026#34;PRIVMSG $chan :$nick $result\\n\u0026#34;); unset($result); break; } } } }else if(substr_count($get[3],\u0026#34;#\u0026#34;)){ //This is like the admin panel. You can /msg the bot to command it to exit. //print_r($get); $chan=trim(str_replace(\u0026#34;:\u0026#34;,\u0026#34;\u0026#34;,$get[3])); $command=trim($get[4]); switch ($command) { case \u0026#34;!exit\u0026#34;: fputs($socket,\u0026#34;PRIVMSG $chan :Shutting Down PHPBot!\\n\u0026#34;); …","date":1289980740,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1289980740,"objectID":"3b4c1c900de372e63af35ecf2810655d","permalink":"https://bibhasdn.com/posts/2010-11-17-build-your-own-irc-bot-in-php/","publishdate":"2010-11-17T07:59:00Z","relpermalink":"/posts/2010-11-17-build-your-own-irc-bot-in-php/","section":"posts","summary":"I started using IRC about 2 months ago. I know its lame of me to get to that stuff so late. But from the very point I logged into a channel, the thing that caught most of my attention was a Bot that used to respond to user command. Now that seemed interesting. I dug some codes in Github, did some Googling and got the idea. Then found a sample snippet of how to create an IRC bot with PHP, at www.thegeeks.us which wasn’t much functional to start with.. I started testing the code and thanks to Ben(spookz), one of the member(and most probably a co-founder too) of thegeeks.us, with some inspiration from him, I got this thing to work.\n","tags":["bot","irc","php"],"title":"Build your own IRC bot in PHP","type":"posts"},{"authors":null,"categories":["client","dabr","technical","tweak","twitter"],"content":"If you don’t know yet, Dabr is an open source Twitter Mobile Web client which can be used from their own site dabr.co.uk or you can download the code from its Google Code page and upload it to your server and use it like your own client.. :) But Don’t forget to read the documentation while installing. :) Now, about auto refreshing, First I thought about using AJAX, but that seemed a lot of work. So, I thought of an alternative. Open the theme.php file which is inside the common directory. Scroll to line no 137. You should see something like this -\u0026gt;\n\u0026lt;head\u0026gt; \u0026lt;title\u0026gt;\u0026#39;,$_SERVER[\u0026#39;SERVER_NAME\u0026#39;],\u0026#39; - \u0026#39;,$title,\u0026#39;\u0026lt;/title\u0026gt; \u0026lt;base href=\u0026#34;\u0026#39;,BASE_URL,\u0026#39;\u0026#34; /\u0026gt; \u0026#39;.theme(\u0026#39;css\u0026#39;).\u0026#39; \u0026lt;/head\u0026gt; Just add this line just before the tag,\n\u0026lt;meta http-equiv=\u0026#34;refresh\u0026#34; content=\u0026#34;30\u0026#34;\u0026gt; Like -\n\u0026lt;head\u0026gt;\u0026lt;title\u0026gt;\u0026#39;,$_SERVER[\u0026#39;SERVER_NAME\u0026#39;],\u0026#39; - \u0026#39;,$title,\u0026#39;\u0026lt;/title\u0026gt;\u0026lt;base href=\u0026#34;\u0026#39;,BASE_URL,\u0026#39;\u0026#34; /\u0026gt; \u0026#39;.theme(\u0026#39;css\u0026#39;).\u0026#39; \u0026lt;meta http-equiv=\u0026#34;refresh\u0026#34; content=\u0026#34;30\u0026#34;\u0026gt; \u0026lt;/head\u0026gt; And save it and upload it to your server. You can change the value 30 as u wish, it’ll be counted as seconds and the page will refresh with that interval. :D For reference,\n“META tags with an HTTP-EQUIV attribute are equivalent to HTTP headers. Typically, they control the action of browsers, and may be used to refine the information provided by the actual headers.”\nSo, I’m just modifying the sent header data and saying the browser that, refresh the page with a 30 seconds interval. :D But be careful. Don’t give the value too less, or you might run out of API calls. :)\n","date":1288443600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1288443600,"objectID":"e0ab139ffce1a851c325db3e9884785c","permalink":"https://bibhasdn.com/posts/auto-refresh-your-dabr-client/","publishdate":"2010-10-30T13:00:00Z","relpermalink":"/posts/auto-refresh-your-dabr-client/","section":"posts","summary":"If you don’t know yet, Dabr is an open source Twitter Mobile Web client which can be used from their own site dabr.co.uk or you can download the code from its Google Code page and upload it to your server and use it like your own client.. :) But Don’t forget to read the documentation while installing. :) Now, about auto refreshing, First I thought about using AJAX, but that seemed a lot of work. So, I thought of an alternative. Open the theme.php file which is inside the common directory. Scroll to line no 137. You should see something like this -\u003e\n","tags":["client","dabr","technical","tweak","twitter"],"title":"Auto Refresh your Dabr client","type":"posts"},{"authors":null,"categories":null,"content":"For an upcoming project of mine, I needed a wide list of indian cities with their states. I found that no readymade list is available. So, had no choice and created one for myself. This list consists of 1000 Indian cities with their names, co-ordinates and corresponding parent areas, mostly states. I’m posting the MySQL Import script here, so you’ll just need to copy it and import it directly.\n-- phpMyAdmin SQL Dump -- version 3.1.3 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generation Time: Oct 02, 2010 at 09:24 PM -- Server version: 5.1.32 -- PHP Version: 5.2.9-1 SET SQL_MODE=\u0026#34;NO_AUTO_VALUE_ON_ZERO\u0026#34;; -- -- Database: `testDb` -- -- -------------------------------------------------------- -- -- Table structure for table `tblcitylist` -- CREATE TABLE IF NOT EXISTS `tblcitylist` ( `city_id` int(5) NOT NULL, `city_name` varchar(50) NOT NULL, `latitude` varchar(10) NOT NULL, `longitude` varchar(10) NOT NULL, `state` varchar(50) NOT NULL, PRIMARY KEY (`city_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `tblcitylist` -- INSERT INTO `tblcitylist` (`city_id`, `city_name`, `latitude`, `longitude`, `state`) VALUES (1, \u0026#39;Port Blair\u0026#39;, \u0026#39;11.67 N\u0026#39;, \u0026#39;92.76 E\u0026#39;, \u0026#39;Andaman and Nicobar Islands\u0026#39;), (2, \u0026#39;Adilabad\u0026#39;, \u0026#39;19.68 N\u0026#39;, \u0026#39;78.53 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (3, \u0026#39;Adoni\u0026#39;, \u0026#39;15.63 N\u0026#39;, \u0026#39;77.28 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (4, \u0026#39;Alwal\u0026#39;, \u0026#39;17.50 N\u0026#39;, \u0026#39;78.54 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (5, \u0026#39;Anakapalle\u0026#39;, \u0026#39;17.69 N\u0026#39;, \u0026#39;83.00 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (6, \u0026#39;Anantapur\u0026#39;, \u0026#39;14.70 N\u0026#39;, \u0026#39;77.59 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (7, \u0026#39;Bapatla\u0026#39;, \u0026#39;15.91 N\u0026#39;, \u0026#39;80.47 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (8, \u0026#39;Belampalli\u0026#39;, \u0026#39;19.06 N\u0026#39;, \u0026#39;79.49 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (9, \u0026#39;Bhimavaram\u0026#39;, \u0026#39;16.55 N\u0026#39;, \u0026#39;81.53 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (10, \u0026#39;Bhongir\u0026#39;, \u0026#39;17.52 N\u0026#39;, \u0026#39;78.88 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (11, \u0026#39;Bobbili\u0026#39;, \u0026#39;18.57 N\u0026#39;, \u0026#39;83.37 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (12, \u0026#39;Bodhan\u0026#39;, \u0026#39;18.66 N\u0026#39;, \u0026#39;77.88 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (13, \u0026#39;Chilakalurupet\u0026#39;, \u0026#39;16.10 N\u0026#39;, \u0026#39;80.16 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (14, \u0026#39;Chinna Chawk\u0026#39;, \u0026#39;14.47 N\u0026#39;, \u0026#39;78.83 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (15, \u0026#39;Chirala\u0026#39;, \u0026#39;15.84 N\u0026#39;, \u0026#39;80.35 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (16, \u0026#39;Chittur\u0026#39;, \u0026#39;13.22 N\u0026#39;, \u0026#39;79.10 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (17, \u0026#39;Cuddapah\u0026#39;, \u0026#39;14.48 N\u0026#39;, \u0026#39;78.81 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (18, \u0026#39;Dharmavaram\u0026#39;, \u0026#39;14.42 N\u0026#39;, \u0026#39;77.71 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (19, \u0026#39;Dhone\u0026#39;, \u0026#39;15.42 N\u0026#39;, \u0026#39;77.88 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (20, \u0026#39;Eluru\u0026#39;, \u0026#39;16.72 N\u0026#39;, \u0026#39;81.11 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (21, \u0026#39;Gaddiannaram\u0026#39;, \u0026#39;17.36 N\u0026#39;, \u0026#39;78.52 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (22, \u0026#39;Gadwal\u0026#39;, \u0026#39;16.23 N\u0026#39;, \u0026#39;77.80 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (23, \u0026#39;Gajuwaka\u0026#39;, \u0026#39;17.70 N\u0026#39;, \u0026#39;83.21 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (24, \u0026#39;Gudivada\u0026#39;, \u0026#39;16.44 N\u0026#39;, \u0026#39;81.00 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (25, \u0026#39;Gudur\u0026#39;, \u0026#39;14.15 N\u0026#39;, \u0026#39;79.84 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (26, \u0026#39;Guntakal\u0026#39;, \u0026#39;15.18 N\u0026#39;, \u0026#39;77.37 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (27, \u0026#39;Guntur\u0026#39;, \u0026#39;16.31 N\u0026#39;, \u0026#39;80.44 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (28, \u0026#39;Hindupur\u0026#39;, \u0026#39;13.83 N\u0026#39;, \u0026#39;77.48 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (29, \u0026#39;Hyderabad\u0026#39;, \u0026#39;17.40 N\u0026#39;, \u0026#39;78.48 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (30, \u0026#39;Jagtial\u0026#39;, \u0026#39;18.80 N\u0026#39;, \u0026#39;78.91 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (31, \u0026#39;Kadiri\u0026#39;, \u0026#39;14.12 N\u0026#39;, \u0026#39;78.16 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (32, \u0026#39;Kagaznagar\u0026#39;, \u0026#39;19.34 N\u0026#39;, \u0026#39;79.48 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (33, \u0026#39;Kakinada\u0026#39;, \u0026#39;16.96 N\u0026#39;, \u0026#39;82.24 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (34, \u0026#39;Kallur\u0026#39;, \u0026#39;15.69 N\u0026#39;, \u0026#39;77.77 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (35, \u0026#39;Kamareddi\u0026#39;, \u0026#39;18.32 N\u0026#39;, \u0026#39;78.35 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (36, \u0026#39;Kapra\u0026#39;, \u0026#39;17.37 N\u0026#39;, \u0026#39;78.48 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (37, \u0026#39;Karimnagar\u0026#39;, \u0026#39;18.45 N\u0026#39;, \u0026#39;79.13 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (38, \u0026#39;Karnul\u0026#39;, \u0026#39;15.83 N\u0026#39;, \u0026#39;78.03 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (39, \u0026#39;Kavali\u0026#39;, \u0026#39;14.92 N\u0026#39;, \u0026#39;79.99 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (40, \u0026#39;Khammam\u0026#39;, \u0026#39;17.25 N\u0026#39;, \u0026#39;80.15 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (41, \u0026#39;Kodar\u0026#39;, \u0026#39;16.98 N\u0026#39;, \u0026#39;79.97 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (42, \u0026#39;Kondukur\u0026#39;, \u0026#39;15.22 N\u0026#39;, \u0026#39;79.91 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (43, \u0026#39;Koratla\u0026#39;, \u0026#39;18.82 N\u0026#39;, \u0026#39;78.72 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (44, \u0026#39;Kottagudem\u0026#39;, \u0026#39;17.56 N\u0026#39;, \u0026#39;80.64 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (45, \u0026#39;Kukatpalle\u0026#39;, \u0026#39;17.49 N\u0026#39;, \u0026#39;78.41 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (46, \u0026#39;Lalbahadur Nagar\u0026#39;, \u0026#39;17.43 N\u0026#39;, \u0026#39;78.50 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (47, \u0026#39;Machilipatnam\u0026#39;, \u0026#39;16.19 N\u0026#39;, \u0026#39;81.14 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (48, \u0026#39;Mahbubnagar\u0026#39;, \u0026#39;16.74 N\u0026#39;, \u0026#39;77.98 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (49, \u0026#39;Malkajgiri\u0026#39;, \u0026#39;17.55 N\u0026#39;, \u0026#39;78.59 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (50, \u0026#39;Mancheral\u0026#39;, \u0026#39;18.88 N\u0026#39;, \u0026#39;79.45 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (51, \u0026#39;Mandamarri\u0026#39;, \u0026#39;18.97 N\u0026#39;, \u0026#39;79.47 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (52, \u0026#39;Mangalagiri\u0026#39;, \u0026#39;16.44 N\u0026#39;, \u0026#39;80.56 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (53, \u0026#39;Markapur\u0026#39;, \u0026#39;15.73 N\u0026#39;, \u0026#39;79.28 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (54, \u0026#39;Miryalaguda\u0026#39;, \u0026#39;16.87 N\u0026#39;, \u0026#39;79.57 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (55, \u0026#39;Nalgonda\u0026#39;, \u0026#39;17.06 N\u0026#39;, \u0026#39;79.26 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (56, \u0026#39;Nandyal\u0026#39;, \u0026#39;15.49 N\u0026#39;, \u0026#39;78.48 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (57, \u0026#39;Narasapur\u0026#39;, \u0026#39;16.45 N\u0026#39;, \u0026#39;81.70 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (58, \u0026#39;Narasaraopet\u0026#39;, \u0026#39;16.24 N\u0026#39;, \u0026#39;80.04 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (59, \u0026#39;Nellur\u0026#39;, \u0026#39;14.46 N\u0026#39;, \u0026#39;79.98 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (60, \u0026#39;Nirmal\u0026#39;, \u0026#39;19.12 N\u0026#39;, \u0026#39;78.35 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (61, \u0026#39;Nizamabad\u0026#39;, \u0026#39;18.68 N\u0026#39;, \u0026#39;78.10 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (62, \u0026#39;Nuzvid\u0026#39;, \u0026#39;16.78 N\u0026#39;, \u0026#39;80.85 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (63, \u0026#39;Ongole\u0026#39;, \u0026#39;15.50 N\u0026#39;, \u0026#39;80.05 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (64, \u0026#39;Palakollu\u0026#39;, \u0026#39;16.52 N\u0026#39;, \u0026#39;81.75 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (65, \u0026#39;Palasa\u0026#39;, \u0026#39;18.77 N\u0026#39;, \u0026#39;84.42 E\u0026#39;, \u0026#39;Andhra Pradesh\u0026#39;), (66, \u0026#39;Palwancha\u0026#39;, \u0026#39;17.60 N\u0026#39;, \u0026#39;80.68 E\u0026#39;, \u0026#39;Andhra …","date":1286024400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1286024400,"objectID":"21bc9a6dfa98450cb8680cd1aca7d685","permalink":"https://bibhasdn.com/posts/mysql-database-of-1000-indian-city-names/","publishdate":"2010-10-02T13:00:00Z","relpermalink":"/posts/mysql-database-of-1000-indian-city-names/","section":"posts","summary":"For an upcoming project of mine, I needed a wide list of indian cities with their states. I found that no readymade list is available. So, had no choice and created one for myself. This list consists of 1000 Indian cities with their names, co-ordinates and corresponding parent areas, mostly states. I’m posting the MySQL Import script here, so you’ll just need to copy it and import it directly.\n-- phpMyAdmin SQL Dump -- version 3.1.3 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generation Time: Oct 02, 2010 at 09:24 PM -- Server version: 5.1.32 -- PHP Version: 5.2.9-1 SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\"; -- -- Database: `testDb` -- -- -------------------------------------------------------- -- -- Table structure for table `tblcitylist` -- CREATE TABLE IF NOT EXISTS `tblcitylist` ( `city_id` int(5) NOT NULL, `city_name` varchar(50) NOT NULL, `latitude` varchar(10) NOT NULL, `longitude` varchar(10) NOT NULL, `state` varchar(50) NOT NULL, PRIMARY KEY (`city_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `tblcitylist` -- INSERT INTO `tblcitylist` (`city_id`, `city_name`, `latitude`, `longitude`, `state`) VALUES (1, 'Port Blair', '11.67 N', '92.76 E', 'Andaman and Nicobar Islands'), (2, 'Adilabad', '19.68 N', '78.53 E', 'Andhra Pradesh'), (3, 'Adoni', '15.63 N', '77.28 E', 'Andhra Pradesh'), (4, 'Alwal', '17.50 N', '78.54 E', 'Andhra Pradesh'), (5, 'Anakapalle', '17.69 N', '83.00 E', 'Andhra Pradesh'), (6, 'Anantapur', '14.70 N', '77.59 E', 'Andhra Pradesh'), (7, 'Bapatla', '15.91 N', '80.47 E', 'Andhra Pradesh'), (8, 'Belampalli', '19.06 N', '79.49 E', 'Andhra Pradesh'), (9, 'Bhimavaram', '16.55 N', '81.53 E', 'Andhra Pradesh'), (10, 'Bhongir', '17.52 N', '78.88 E', 'Andhra Pradesh'), (11, 'Bobbili', '18.57 N', '83.37 E', 'Andhra Pradesh'), (12, 'Bodhan', '18.66 N', '77.88 E', 'Andhra Pradesh'), (13, 'Chilakalurupet', '16.10 N', '80.16 E', 'Andhra Pradesh'), (14, 'Chinna Chawk', '14.47 N', '78.83 E', 'Andhra Pradesh'), (15, 'Chirala', '15.84 N', '80.35 E', 'Andhra Pradesh'), (16, 'Chittur', '13.22 N', '79.10 E', 'Andhra Pradesh'), (17, 'Cuddapah', '14.48 N', '78.81 E', 'Andhra Pradesh'), (18, 'Dharmavaram', '14.42 N', '77.71 E', 'Andhra Pradesh'), (19, 'Dhone', '15.42 N', '77.88 E', 'Andhra Pradesh'), (20, 'Eluru', '16.72 N', '81.11 E', 'Andhra Pradesh'), (21, 'Gaddiannaram', '17.36 N', '78.52 E', 'Andhra Pradesh'), (22, 'Gadwal', '16.23 N', '77.80 E', 'Andhra Pradesh'), (23, 'Gajuwaka', '17.70 N', '83.21 E', 'Andhra Pradesh'), (24, 'Gudivada', '16.44 N', '81.00 E', 'Andhra Pradesh'), (25, 'Gudur', '14.15 N', '79.84 E', 'Andhra Pradesh'), (26, 'Guntakal', '15.18 N', '77.37 E', 'Andhra Pradesh'), (27, 'Guntur', '16.31 N', '80.44 E', 'Andhra Pradesh'), (28, 'Hindupur', '13.83 N', '77.48 E', 'Andhra Pradesh'), (29, 'Hyderabad', '17.40 N', '78.48 E', 'Andhra Pradesh'), (30, 'Jagtial', '18.80 N', '78.91 E', 'Andhra Pradesh'), (31, 'Kadiri', '14.12 N', '78.16 E', 'Andhra Pradesh'), (32, 'Kagaznagar', '19.34 N', '79.48 E', 'Andhra Pradesh'), (33, 'Kakinada', '16.96 N', '82.24 E', 'Andhra Pradesh'), (34, 'Kallur', '15.69 N', '77.77 E', 'Andhra Pradesh'), (35, 'Kamareddi', '18.32 N', '78.35 E', 'Andhra Pradesh'), (36, 'Kapra', '17.37 N', '78.48 E', 'Andhra Pradesh'), (37, 'Karimnagar', '18.45 N', '79.13 E', 'Andhra Pradesh'), (38, 'Karnul', '15.83 N', '78.03 E', 'Andhra Pradesh'), (39, 'Kavali', '14.92 N', '79.99 E', 'Andhra Pradesh'), (40, 'Khammam', '17.25 N', '80.15 E', 'Andhra Pradesh'), (41, 'Kodar', '16.98 N', '79.97 E', 'Andhra Pradesh'), (42, 'Kondukur', '15.22 N', '79.91 E', 'Andhra Pradesh'), (43, 'Koratla', '18.82 N', '78.72 E', 'Andhra Pradesh'), (44, 'Kottagudem', '17.56 N', '80.64 E', 'Andhra Pradesh'), (45, 'Kukatpalle', '17.49 N', '78.41 E', 'Andhra Pradesh'), (46, 'Lalbahadur Nagar', '17.43 N', '78.50 E', 'Andhra Pradesh'), (47, 'Machilipatnam', '16.19 N', '81.14 E', 'Andhra Pradesh'), (48, 'Mahbubnagar', '16.74 N', '77.98 E', 'Andhra Pradesh'), (49, 'Malkajgiri', '17.55 N', '78.59 E', 'Andhra Pradesh'), (50, 'Mancheral', '18.88 N', '79.45 E', 'Andhra Pradesh'), (51, 'Mandamarri', '18.97 N', '79.47 E', 'Andhra Pradesh'), (52, 'Mangalagiri', '16.44 N', '80.56 E', 'Andhra Pradesh'), (53, 'Markapur', '15.73 N', '79.28 E', 'Andhra Pradesh'), (54, 'Miryalaguda', '16.87 N', '79.57 E', 'Andhra Pradesh'), (55, 'Nalgonda', '17.06 N', '79.26 E', 'Andhra Pradesh'), (56, 'Nandyal', '15.49 N', '78.48 E', 'Andhra Pradesh'), (57, 'Narasapur', '16.45 N', '81.70 E', 'Andhra Pradesh'), (58, 'Narasaraopet', '16.24 N', '80.04 E', 'Andhra Pradesh'), (59, 'Nellur', '14.46 N', '79.98 E', 'Andhra Pradesh'), (60, 'Nirmal', '19.12 N', '78.35 E', 'Andhra Pradesh'), (61, 'Nizamabad', '18.68 N', '78.10 E', 'Andhra Pradesh'), (62, 'Nuzvid', '16.78 N', '80.85 E', 'Andhra Pradesh'), (63, 'Ongole', '15.50 N', '80.05 E', 'Andhra Pradesh'), (64, 'Palakollu', '16.52 N', '81.75 E', 'Andhra Pradesh'), (65, 'Palasa', '18.77 N', '84.42 E', 'Andhra Pradesh'), (66, 'Palwancha', '17.60 N', '80.68 E', 'Andhra Pradesh'), (67, 'Patancheru', '17.53 N', '78.27 E', 'Andhra Pradesh'), (68, 'Piduguralla', '16.48 N', '79.90 E', 'Andhra Pradesh'), (69, 'Ponnur', '16.07 N', '80.56 E', 'Andhra Pradesh'), (70, 'Proddatur', '14.73 N', '78.55 E', 'Andhra Pradesh'), (71, 'Qutubullapur', '17.43 N', '78.47 E', 'Andhra Pradesh'), (72, 'Rajamahendri', '17.02 N', '81.79 E', 'Andhra Pradesh'), (73, 'Rajampet', '14.18 N', '79.17 E', 'Andhra Pradesh'), (74, 'Rajendranagar', '17.29 N', '78.39 E', 'Andhra Pradesh'), (75, 'Ramachandrapuram', '17.56 N', '78.04 E', 'Andhra Pradesh'), (76, 'Ramagundam', '18.80 N', '79.45 E', 'Andhra Pradesh'), (77, 'Rayachoti', '14.05 N', '78.75 E', 'Andhra Pradesh'), (78, 'Rayadrug', '14.70 N', '76.87 E', 'Andhra Pradesh'), (79, 'Samalkot', '17.06 N', '82.18 E', 'Andhra Pradesh'), (80, 'Sangareddi', '17.63 N', '78.08 E', 'Andhra Pradesh'), (81, 'Sattenapalle', '16.40 N', '80.18 E', 'Andhra Pradesh'), (82, 'Serilungampalle', '17.48 N', '78.33 E', 'Andhra Pradesh'), (83, 'Siddipet', '18.11 N', '78.84 E', 'Andhra Pradesh'), (84, 'Sikandarabad', '17.47 N', '78.52 E', 'Andhra Pradesh'), (85, 'Sirsilla', '18.40 N', '78.81 E', 'Andhra Pradesh'), (86, 'Srikakulam', '18.30 N', '83.90 E', 'Andhra Pradesh'), (87, 'Srikalahasti', '13.76 N', '79.70 E', 'Andhra Pradesh'), (88, 'Suriapet', '17.15 N', '79.62 E', 'Andhra Pradesh'), (89, 'Tadepalle', '16.48 N', '80.60 E', 'Andhra Pradesh'), (90, 'Tadepallegudem', '16.82 N', '81.52 E', 'Andhra Pradesh'), (91, 'Tadpatri', '14.91 N', '78.00 E', 'Andhra Pradesh'), (92, 'Tandur', '17.25 N', '77.58 E', 'Andhra Pradesh'), (93, 'Tanuku', '16.75 N', '81.69 E', 'Andhra Pradesh'), (94, 'Tenali', '16.24 N', '80.65 E', 'Andhra Pradesh'), (95, 'Tirupati', '13.63 N', '79.41 E', 'Andhra Pradesh'), (96, 'Tuni', '17.35 N', '82.55 E', 'Andhra Pradesh'), (97, 'Uppal Kalan', '17.38 N', '78.55 E', 'Andhra Pradesh'), (98, 'Vijayawada', '16.52 N', '80.63 E', 'Andhra Pradesh'), (99, 'Vinukonda', '16.05 N', '79.75 E', 'Andhra Pradesh'), (100, 'Visakhapatnam', '17.73 N', '83.30 E', 'Andhra Pradesh'), (101, 'Vizianagaram', '18.12 N', '83.40 E', 'Andhra Pradesh'), (102, 'Vuyyuru', '16.37 N', '80.85 E', 'Andhra Pradesh'), (103, 'Wanparti', '16.37 N', '78.07 E', 'Andhra Pradesh'), (104, 'Warangal', '18.01 N', '79.58 E', 'Andhra Pradesh'), (105, 'Yemmiganur', '15.73 N', '77.48 E', 'Andhra Pradesh'), (106, 'Itanagar', '27.14 N', '93.61 E', 'Arunachal Pradesh'), (107, 'Barpeta', '26.32 N', '91.00 E', 'Assam'), (108, 'Bongaigaon', '26.48 N', '90.54 E', 'Assam'), (109, 'Dhuburi', '26.03 N', '89.97 E', 'Assam'), (110, 'Dibrugarh', '27.49 N', '94.91 E', 'Assam'), (111, 'Diphu', '25.84 N', '93.43 E', 'Assam'), (112, 'Guwahati', '26.19 N', '91.75 E', 'Assam'), (113, 'Jorhat', '26.76 N', '94.20 E', 'Assam'), (114, 'Karimganj', '24.85 N', '92.36 E', 'Assam'), (115, 'Lakhimpur', '27.24 N', '94.10 E', 'Assam'), (116, 'Lanka', '25.93 N', '92.95 E', 'Assam'), (117, 'Nagaon', '26.35 N', '92.68 E', 'Assam'), (118, 'Sibsagar', '26.99 N', '94.63 E', 'Assam'), (119, 'Silchar', '24.83 N', '92.77 E', 'Assam'), (120, 'Tezpur', '26.63 N', '92.79 E', 'Assam'), (121, 'Tinsukia', '27.50 N', '95.36 E', 'Assam'), (122, 'Alipur Duar', '26.50 N', '89.53 E', 'West Bengal'), (123, 'Arambagh', '22.88 N', '87.78 E', 'West Bengal'), (124, 'Asansol', '23.69 N', '86.98 E', 'West Bengal'), (125, 'Ashoknagar Kalyangarh', '22.84 N', '88.63 E', 'West Bengal'), (126, 'Baharampur', '24.10 N', '88.24 E', 'West Bengal'), (127, 'Baidyabati', '22.79 N', '88.33 E', 'West Bengal'), (128, 'Baj Baj', '22.48 N', '88.17 E', 'West Bengal'), (129, 'Bally', '22.65 N', '88.35 E', 'West Bengal'), (130, 'Bally Cantonment', '22.65 N', '88.36 E', 'West Bengal'), (131, 'Balurghat', '25.23 N', '88.77 E', 'West Bengal'), (132, 'Bangaon', '23.05 N', '88.83 E', 'West Bengal'), (133, 'Bankra', '22.58 N', '88.31 E', 'West Bengal'), (134, 'Bankura', '23.24 N', '87.07 E', 'West Bengal'), (135, 'Bansbaria', '22.95 N', '88.40 E', 'West Bengal'), (136, 'Baranagar', '22.64 N', '88.37 E', 'West Bengal'), (137, 'Barddhaman', '23.24 N', '87.86 E', 'West Bengal'), (138, 'Basirhat', '22.66 N', '88.86 E', 'West Bengal'), (139, 'Bhadreswar', '22.84 N', '88.35 E', 'West Bengal'), (140, 'Bhatpara', '22.89 N', '88.42 E', 'West Bengal'), (141, 'Bidhannagar', '22.57 N', '88.42 E', 'West Bengal'), (142, 'Binnaguri', '26.74 N', '89.037 E', 'West Bengal'), (143, 'Bishnupur', '23.08 N', '87.33 E', 'West Bengal'), (144, 'Bolpur', '23.67 N', '87.70 E', 'West Bengal'), (145, 'Calcutta', '22.57 N', '88.36 E', 'West Bengal'), (146, 'Chakdaha', '22.48 N', '88.35 E', 'West Bengal'), (147, 'Champdani', '22.81 N', '88.34 E', 'West Bengal'), (148, 'Chandannagar', '22.89 N', '88.37 E', 'West Bengal'), (149, 'Contai', '21.79 N', '87.75 E', 'West Bengal'), (150, 'Dabgram', '', '', 'West Bengal'), (151, 'Darjiling', '27.05 N', '88.26 E', 'West Bengal'), (152, 'Dhulian', '24.68 N', '87.97 E', 'West Bengal'), (153, 'Dinhata', '26.13 N', '89.47 E', 'West Bengal'), (154, 'Dum Dum', '22.63 N', '88.42 E', 'West Bengal'), (155, 'Durgapur', '23.50 N', '87.31 E', 'West Bengal'), (156, 'Gangarampur', '25.40 N', '88.52 E', 'West Bengal'), (157, 'Garulia', '22.83 N', '88.37 E', 'West Bengal'), (158, 'Gayespur', '22.98 N', '88.51 E', 'West Bengal'), (159, 'Ghatal', '22.67 N', '87.72 E', 'West Bengal'), (160, 'Gopalpur', '', '', 'West Bengal'), (161, 'Habra', '22.84 N', '88.62 E', 'West Bengal'), (162, 'Halisahar', '22.95 N', '88.42 E', 'West Bengal'), (163, 'Haora', '22.58 N', '88.33 E', 'West Bengal'), (164, 'HugliChunchura', '22.91 N', '88.40 E', 'West Bengal'), (165, 'Ingraj Bazar', '25.01 N', '88.14 E', 'West Bengal'), (166, 'Islampur', '26.27 N', '88.20 E', 'West Bengal'), (167, 'Jalpaiguri', '26.53 N', '88.71 E', 'West Bengal'), (168, 'Jamuria', '23.70 N', '87.08 E', 'West Bengal'), (169, 'Jangipur', '24.47 N', '88.07 E', 'West Bengal'), (170, 'Jhargram', '22.45 N', '86.98 E', 'West Bengal'), (171, 'Kaliyaganj', '25.63 N', '88.32 E', 'West Bengal'), (172, 'Kalna', '23.22 N', '88.37 E', 'West Bengal'), (173, 'Kalyani', '22.98 N', '88.48 E', 'West Bengal'), (174, 'Kamarhati', '22.67 N', '88.37 E', 'West Bengal'), (175, 'Kanchrapara', '22.95 N', '88.45 E', 'West Bengal'), (176, 'Kandi', '23.95 N', '88.03 E', 'West Bengal'), (177, 'Karsiyang', '26.88 N', '88.28 E', 'West Bengal'), (178, 'Katwa', '23.65 N', '88.13 E', 'West Bengal'), (179, 'Kharagpur', '22.34 N', '87.31 E', 'West Bengal'), (180, 'Kharagpur Railway Settlement', '22.34 N', '87.26 E', 'West Bengal'), (181, 'Khardaha', '22.73 N', '88.38 E', 'West Bengal'), (182, 'Kharia', '', '', 'West Bengal'), (183, 'Koch Bihar', '26.33 N', '89.46 E', 'West Bengal'), (184, 'Konnagar', '22.70 N', '88.36 E', 'West Bengal'), (185, 'Krishnanagar', '23.41 N', '88.51 E', 'West Bengal'), (186, 'Kulti', '23.72 N', '86.89 E', 'West Bengal'), (187, 'Madhyamgram', '22.70 N', '88.45 E', 'West Bengal'), (188, 'Maheshtala', '22.51 N', '88.23 E', 'West Bengal'), (189, 'Memari', '23.20 N', '88.12 E', 'West Bengal'), (190, 'Midnapur', '22.33 N', '87.15 E', 'West Bengal'), (191, 'Naihati', '22.91 N', '88.43 E', 'West Bengal'), (192, 'Navadwip', '23.42 N', '88.37 E', 'West Bengal'), (193, 'Ni Barakpur', '22.77 N', '88.36 E', 'West Bengal'), (194, 'North Barakpur', '22.78 N', '88.37 E', 'West Bengal'), (195, 'North Dum Dum', '22.64 N', '88.41 E', 'West Bengal'), (196, 'Old Maldah', '', '', 'West Bengal'), (197, 'Panihati', '22.69 N', '88.37 E', 'West Bengal'), (198, 'Phulia', '23.24 N', '88.50 E', 'West Bengal'), (199, 'Pujali', '22.47 N', '88.15 E', 'West Bengal'), (200, 'Puruliya', '23.34 N', '86.36 E', 'West Bengal'), (201, 'Raiganj', '25.62 N', '88.12 E', 'West Bengal'), (202, 'Rajpur', '22.44 N', '88.44 E', 'West Bengal'), (203, 'Rampur Hat', '24.17 N', '87.78 E', 'West Bengal'), (204, 'Ranaghat', '23.19 N', '88.58 E', 'West Bengal'), (205, 'Raniganj', '23.62 N', '87.11 E', 'West Bengal'), (206, 'Rishra', '22.71 N', '88.36 E', 'West Bengal'), (207, 'Shantipur', '23.26 N', '88.44 E', 'West Bengal'), (208, 'Shiliguri', '26.73 N', '88.42 E', 'West Bengal'), (209, 'Shrirampur', '22.74 N', '88.35 E', 'West Bengal'), (210, 'Siuri', '23.91 N', '87.53 E', 'West Bengal'), (211, 'South Dum Dum', '22.61 N', '88.41 E', 'West Bengal'), (212, 'Titagarh', '22.74 N', '88.38 E', 'West Bengal'), (213, 'Ulubaria', '22.47 N', '88.11 E', 'West Bengal'), (214, 'UttarparaKotrung', '22.66 N', '88.35 E', 'West Bengal'), (215, 'Araria', '26.15 N', '87.52 E', 'Bihar'), (216, 'Arrah', '25.56 N', '84.66 E', 'Bihar'), (217, 'Aurangabad', '24.75 N', '84.37 E', 'Bihar'), (218, 'Bagaha', '27.10 N', '84.09 E', 'Bihar'), (219, 'Begusarai', '25.42 N', '86.12 E', 'Bihar'), (220, 'Bettiah', '26.81 N', '84.50 E', 'Bihar'), (221, 'Bhabua', '25.05 N', '83.62 E', 'Bihar'), (222, 'Bhagalpur', '25.26 N', '86.98 E', 'Bihar'), (223, 'Bihar', '25.21 N', '85.52 E', 'Bihar'), (224, 'Buxar', '25.58 N', '83.98 E', 'Bihar'), (225, 'Chhapra', '25.78 N', '84.72 E', 'Bihar'), (226, 'Darbhanga', '26.16 N', '85.88 E', 'Bihar'), (227, 'Dehri', '24.91 N', '84.18 E', 'Bihar'), (228, 'DighaMainpura', '', '', 'Bihar'), (229, 'Dinapur', '25.64 N', '85.04 E', 'Bihar'), (230, 'Dumraon', '25.55 N', '84.15 E', 'Bihar'), (231, 'Gaya', '24.81 N', '85.00 E', 'Bihar'), (232, 'Gopalganj', '26.47 N', '84.43 E', 'Bihar'), (233, 'Goura', '', '', 'Bihar'), (234, 'Hajipur', '', '', 'Bihar'), (235, 'Jahanabad', '25.22 N', '84.98 E', 'Bihar'), (236, 'Jamalpur', '25.32 N', '86.48 E', 'Bihar'), (237, 'Jamui', '24.92 N', '86.22 E', 'Bihar'), (238, 'Katihar', '25.55 N', '87.57 E', 'Bihar'), (239, 'Khagaria', '25.50 N', '86.48 E', 'Bihar'), (240, 'Khagaul', '25.58 N', '85.05 E', 'Bihar'), (241, 'Kishanganj', '26.11 N', '87.95 E', 'Bihar'), (242, 'Lakhisarai', '25.18 N', '86.09 E', 'Bihar'), (243, 'Madhipura', '25.92 N', '86.78 E', 'Bihar'), (244, 'Madhubani', '26.37 N', '86.06 E', 'Bihar'), (245, 'Masaurhi', '25.35 N', '85.03 E', 'Bihar'), (246, 'Mokama', '25.40 N', '85.92 E', 'Bihar'), (247, 'Motihari', '26.66 N', '84.91 E', 'Bihar'), (248, 'Munger', '25.39 N', '86.47 E', 'Bihar'), (249, 'Muzaffarpur', '26.13 N', '85.38 E', 'Bihar'), (250, 'Nawada', '24.88 N', '85.54 E', 'Bihar'), (251, 'Patna', '25.62 N', '85.13 E', 'Bihar'), (252, 'Phulwari', '25.60 N', '85.13 E', 'Bihar'), (253, 'Purnia', '25.78 N', '87.47 E', 'Bihar'), (254, 'Raxaul', '26.98 N', '84.85 E', 'Bihar'), (255, 'Saharsa', '25.88 N', '86.59 E', 'Bihar'), (256, 'Samastipur', '25.85 N', '85.78 E', 'Bihar'), (257, 'Sasaram', '24.96 N', '84.01 E', 'Bihar'), (258, 'Sitamarhi', '26.61 N', '85.48 E', 'Bihar'), (259, 'Siwan', '26.23 N', '84.35 E', 'Bihar'), (260, 'Supaul', '26.12 N', '86.60 E', 'Bihar'), (261, 'Chandigarh', '30.75 N', '76.78 E', 'Chandigarh'), (262, 'Ambikapur', '23.13 N', '83.20 E', 'Chhattisgarh'), (263, 'Bhilai', '21.21 N', '81.38 E', 'Chhattisgarh'), (264, 'Bilaspur', '22.09 N', '82.15 E', 'Chhattisgarh'), (265, 'Charoda', '21.23 N', '81.50 E', 'Chhattisgarh'), (266, 'Chirmiri', '23.21 N', '82.41 E', 'Chhattisgarh'), (267, 'Dhamtari', '20.71 N', '81.55 E', 'Chhattisgarh'), (268, 'Durg', '21.20 N', '81.28 E', 'Chhattisgarh'), (269, 'Jagdalpur', '19.09 N', '82.03 E', 'Chhattisgarh'), (270, 'Korba', '22.35 N', '82.69 E', 'Chhattisgarh'), (271, 'Raigarh', '21.90 N', '83.39 E', 'Chhattisgarh'), (272, 'Raipur', '21.24 N', '81.63 E', 'Chhattisgarh'), (273, 'Rajnandgaon', '21.10 N', '81.04 E', 'Chhattisgarh'), (274, 'Bhalswa Jahangirpur', '28.74 N', '77.17 E', 'Delhi'), (275, 'Burari', '', '', 'Delhi'), (276, 'Chilla Saroda Bangar', '', '', 'Delhi'), (277, 'Dallo Pura', '', '', 'Delhi'), (278, 'Delhi', '28.67 N', '77.21 E', 'Delhi'), (279, 'Deoli', '28.49 N', '77.22 E', 'Delhi'), (280, 'Dilli Cantonment', '28.57 N', '77.16 E', 'Delhi'), (281, 'Gharoli', '', '', 'Delhi'), (282, 'Gokalpur', '28.71 N', '77.28 E', 'Delhi'), (283, 'Hastsal', '', '', 'Delhi'), (284, 'Jaffrabad', '', '', 'Delhi'), (285, 'Karawal Nagar', '', '', 'Delhi'), (286, 'Khajuri Khas', '', '', 'Delhi'), (287, 'Kirari Suleman Nagar', '', '', 'Delhi'), (288, 'Mandoli', '', '', 'Delhi'), (289, 'Mithe Pur', '', '', 'Delhi'), (290, 'Molarband', '', '', 'Delhi'), (291, 'Mundka', '', '', 'Delhi'), (292, 'Mustafabad', '', '', 'Delhi'), (293, 'Nangloi Jat', '28.68 N', '77.07 E', 'Delhi'), (294, 'Ni Dilli', '28.60 N', '77.22 E', 'Delhi'), (295, 'Pul Pehlad', '', '', 'Delhi'), (296, 'Puth Kalan', '', '', 'Delhi'), (297, 'Roshan Pura', '28.60 N', '76.99 E', 'Delhi'), (298, 'Sadat Pur Gujran', '', '', 'Delhi'), (299, 'Sultanpur Majra', '28.76 N', '77.06 E', 'Delhi'), (300, 'Tajpul', '', '', 'Delhi'), (301, 'Tigri', '28.50 N', '77.22 E', 'Delhi'), (302, 'Ziauddin Pur', '', '', 'Delhi'), (303, 'Madgaon', '15.28 N', '73.94 E', 'Goa'), (304, 'Mormugao', '15.42 N', '73.78 E', 'Goa'), (305, 'Panaji', '15.50 N', '73.81 E', 'Goa'), (306, 'Ahmadabad', '23.03 N', '72.58 E', 'Gujarat'), (307, 'Amreli', '21.61 N', '71.22 E', 'Gujarat'), (308, 'Anand', '22.56 N', '72.95 E', 'Gujarat'), (309, 'Anjar', '23.12 N', '70.02 E', 'Gujarat'), (310, 'Bardoli', '21.12 N', '73.12 E', 'Gujarat'), (311, 'Bharuch', '21.71 N', '72.97 E', 'Gujarat'), (312, 'Bhavnagar', '21.79 N', '72.13 E', 'Gujarat'), (313, 'Bhuj', '23.26 N', '69.66 E', 'Gujarat'), (314, 'Borsad', '22.42 N', '72.90 E', 'Gujarat'), (315, 'Botad', '22.18 N', '71.66 E', 'Gujarat'), (316, 'Chandkheda', '23.15 N', '72.61 E', 'Gujarat'), (317, 'Chandlodiya', '23.10 N', '72.56 E', 'Gujarat'), (318, 'Dabhoi', '22.13 N', '73.41 E', 'Gujarat'), (319, 'Dahod', '22.84 N', '74.25 E', 'Gujarat'), (320, 'Dholka', '22.74 N', '72.44 E', 'Gujarat'), (321, 'Dhoraji', '21.74 N', '70.44 E', 'Gujarat'), (322, 'Dhrangadhra', '23.00 N', '71.46 E', 'Gujarat'), (323, 'Disa', '24.26 N', '72.18 E', 'Gujarat'), (324, 'Gandhidham', '23.07 N', '70.13 E', 'Gujarat'), (325, 'Gandhinagar', '23.30 N', '72.63 E', 'Gujarat'), (326, 'Ghatlodiya', '23.05 N', '72.55 E', 'Gujarat'), (327, 'Godhra', '22.77 N', '73.60 E', 'Gujarat'), (328, 'Gondal', '21.97 N', '70.80 E', 'Gujarat'), (329, 'Himatnagar', '23.60 N', '72.96 E', 'Gujarat'), (330, 'Jamnagar', '22.47 N', '70.07 E', 'Gujarat'), (331, 'Jamnagar', '', '', 'Gujarat'), (332, 'Jetpur', '21.75 N', '70.61 E', 'Gujarat'), (333, 'Junagadh', '21.52 N', '70.45 E', 'Gujarat'), (334, 'Kalol', '23.25 N', '72.49 E', 'Gujarat'), (335, 'Keshod', '21.31 N', '70.23 E', 'Gujarat'), (336, 'Khambhat', '22.32 N', '72.61 E', 'Gujarat'), (337, 'Kundla', '21.35 N', '71.30 E', 'Gujarat'), (338, 'Mahuva', '21.10 N', '71.75 E', 'Gujarat'), (339, 'Mangrol', '21.12 N', '70.12 E', 'Gujarat'), (340, 'Modasa', '23.47 N', '73.30 E', 'Gujarat'), (341, 'Morvi', '22.82 N', '70.83 E', 'Gujarat'), (342, 'Nadiad', '22.70 N', '72.85 E', 'Gujarat'), (343, 'Navagam Ghed', '', '', 'Gujarat'), (344, 'Navsari', '20.96 N', '72.92 E', 'Gujarat'), (345, 'Palitana', '21.52 N', '71.83 E', 'Gujarat'), (346, 'Patan', '23.86 N', '72.11 E', 'Gujarat'), (347, 'Porbandar', '21.65 N', '69.60 E', 'Gujarat'), (348, 'Puna', '', '', 'Gujarat'), (349, 'Rajkot', '22.31 N', '70.79 E', 'Gujarat'), (350, 'Ramod', '', '', 'Gujarat'), (351, 'Ranip', '23.03 N', '72.54 E', 'Gujarat'), (352, 'Siddhapur', '23.92 N', '72.37 E', 'Gujarat'), (353, 'Sihor', '21.70 N', '71.97 E', 'Gujarat'), (354, 'Surat', '21.20 N', '72.82 E', 'Gujarat'), (355, 'Surendranagar', '22.71 N', '71.67 E', 'Gujarat'), (356, 'Thaltej', '', '', 'Gujarat'), (357, 'Una', '20.82 N', '71.03 E', 'Gujarat'), (358, 'Unjha', '23.81 N', '72.38 E', 'Gujarat'), (359, 'Upleta', '21.75 N', '70.27 E', 'Gujarat'), (360, 'Vadodara', '22.31 N', '73.18 E', 'Gujarat'), (361, 'Valsad', '20.62 N', '72.92 E', 'Gujarat'), (362, 'Vapi', '20.37 N', '72.90 E', 'Gujarat'), (363, 'Vastral', '', '', 'Gujarat'), (364, 'Vejalpur', '', '', 'Gujarat'), (365, 'Veraval', '20.92 N', '70.34 E', 'Gujarat'), (366, 'Vijalpor', '', '', 'Gujarat'), (367, 'Visnagar', '23.71 N', '72.54 E', 'Gujarat'), (368, 'Wadhwan', '22.73 N', '71.72 E', 'Gujarat'), (369, 'Ambala', '30.38 N', '76.77 E', 'Haryana'), (370, 'Ambala Cantonment', '30.39 N', '76.86 E', 'Haryana'), (371, 'Ambala Sadar', '30.35 N', '76.84 E', 'Haryana'), (372, 'Bahadurgarh', '28.69 N', '76.92 E', 'Haryana'), (373, 'Bhiwani', '28.81 N', '76.12 E', 'Haryana'), (374, 'Charkhi Dadri', '28.60 N', '76.27 E', 'Haryana'), (375, 'Dabwali', '29.95 N', '74.73 E', 'Haryana'), (376, 'Faridabad', '28.38 N', '77.30 E', 'Haryana'), (377, 'Gohana', '29.13 N', '76.70 E', 'Haryana'), (378, 'Hisar', '29.17 N', '75.72 E', 'Haryana'), (379, 'Jagadhri', '30.18 N', '77.29 E', 'Haryana'), (380, 'Jind', '29.31 N', '76.30 E', 'Haryana'), (381, 'Kaithal', '29.81 N', '76.40 E', 'Haryana'), (382, 'Karnal', '29.69 N', '76.97 E', 'Haryana'), (383, 'Narnaul', '28.04 N', '76.10 E', 'Haryana'), (384, 'Narwana', '29.62 N', '76.12 E', 'Haryana'), (385, 'Palwal', '28.15 N', '77.32 E', 'Haryana'), (386, 'Panchkula', '30.70 N', '76.88 E', 'Haryana'), (387, 'Panipat', '29.39 N', '76.96 E', 'Haryana'), (388, 'Rewari', '28.19 N', '76.60 E', 'Haryana'), (389, 'Rohtak', '28.90 N', '76.58 E', 'Haryana'), (390, 'Sirsa', '29.53 N', '75.03 E', 'Haryana'), (391, 'Sonipat', '28.99 N', '77.01 E', 'Haryana'), (392, 'Thanesar', '29.98 N', '76.82 E', 'Haryana'), (393, 'Tohana', '29.70 N', '75.90 E', 'Haryana'), (394, 'Yamunanagar', '30.14 N', '77.28 E', 'Haryana'), (395, 'Shimla', '31.11 N', '77.16 E', 'Himachal Pradesh'), (396, 'Anantnag', '33.73 N', '75.15 E', 'Jammu and Kashmir'), (397, 'Baramula', '34.20 N', '74.35 E', 'Jammu and Kashmir'), (398, 'Bari Brahmana', '', '', 'Jammu and Kashmir'), (399, 'Jammu', '32.71 N', '74.85 E', 'Jammu and Kashmir'), (400, 'Kathua', '32.37 N', '75.52 E', 'Jammu and Kashmir'), (401, 'Sopur', '34.30 N', '74.47 E', 'Jammu and Kashmir'), (402, 'Srinagar', '34.09 N', '74.79 E', 'Jammu and Kashmir'), (403, 'Udhampur', '32.93 N', '75.13 E', 'Jammu and Kashmir'), (404, 'Adityapur', '22.80 N', '86.04 E', 'Jharkhand'), (405, 'Bagbahra', '22.82 N', '86.20 E', 'Jharkhand'), (406, 'Bhuli', '23.79 N', '86.38 E', 'Jharkhand'), (407, 'Bokaro', '23.78 N', '85.96 E', 'Jharkhand'), (408, 'Chaibasa', '22.56 N', '85.80 E', 'Jharkhand'), (409, 'Chas', '23.65 N', '86.17 E', 'Jharkhand'), (410, 'Daltenganj', '24.05 N', '84.06 E', 'Jharkhand'), (411, 'Devghar', '24.49 N', '86.69 E', 'Jharkhand'), (412, 'Dhanbad', '23.80 N', '86.42 E', 'Jharkhand'), (413, 'Hazaribag', '24.01 N', '85.36 E', 'Jharkhand'), (414, 'Jamshedpur', '22.79 N', '86.20 E', 'Jharkhand'), (415, 'Jharia', '23.76 N', '86.42 E', 'Jharkhand'), (416, 'Jhumri Tilaiya', '24.43 N', '85.52 E', 'Jharkhand'), (417, 'Jorapokhar', '23.79 N', '86.36 E', 'Jharkhand'), (418, 'Katras', '23.80 N', '86.28 E', 'Jharkhand'), (419, 'Lohardaga', '23.43 N', '84.68 E', 'Jharkhand'), (420, 'Mango', '22.85 N', '86.21 E', 'Jharkhand'), (421, 'Phusro', '23.68 N', '85.86 E', 'Jharkhand'), (422, 'Ramgarh', '23.63 N', '85.51 E', 'Jharkhand'), (423, 'Ranchi', '23.36 N', '85.33 E', 'Jharkhand'), (424, 'Sahibganj', '25.25 N', '87.62 E', 'Jharkhand'), (425, 'Saunda', '23.64 N', '85.37 E', 'Jharkhand'), (426, 'Sindari', '23.68 N', '86.49 E', 'Jharkhand'), (427, 'Bagalkot', '16.19 N', '75.69 E', 'Karnataka'), (428, 'Bangalore', '12.97 N', '77.56 E', 'Karnataka'), (429, 'Basavakalyan', '17.87 N', '76.95 E', 'Karnataka'), (430, 'Belgaum', '15.86 N', '74.50 E', 'Karnataka'), (431, 'Bellary', '15.14 N', '76.91 E', 'Karnataka'), (432, 'Bhadravati', '13.84 N', '75.69 E', 'Karnataka'), (433, 'Bidar', '17.92 N', '77.52 E', 'Karnataka'), (434, 'Bijapur', '16.83 N', '75.71 E', 'Karnataka'), (435, 'Bommanahalli', '13.01 N', '77.63 E', 'Karnataka'), (436, 'Byatarayanapura', '', '', 'Karnataka'), (437, 'Challakere', '14.32 N', '76.65 E', 'Karnataka'), (438, 'Chamrajnagar', '11.92 N', '76.95 E', 'Karnataka'), (439, 'Channapatna', '12.66 N', '77.19 E', 'Karnataka'), (440, 'Chik Ballapur', '13.47 N', '77.73 E', 'Karnataka'), (441, 'Chikmagalur', '13.32 N', '75.76 E', 'Karnataka'), (442, 'Chintamani', '13.40 N', '78.05 E', 'Karnataka'), (443, 'Chitradurga', '14.23 N', '76.39 E', 'Karnataka'), (444, 'Dasarahalli', '13.01 N', '77.49 E', 'Karnataka'), (445, 'Davanagere', '14.46 N', '75.92 E', 'Karnataka'), (446, 'Dod Ballapur', '13.30 N', '77.52 E', 'Karnataka'), (447, 'Gadag', '15.44 N', '75.63 E', 'Karnataka'), (448, 'Gangawati', '15.44 N', '76.52 E', 'Karnataka'), (449, 'Gokak', '16.18 N', '74.81 E', 'Karnataka'), (450, 'Gulbarga', '17.34 N', '76.82 E', 'Karnataka'), (451, 'Harihar', '14.52 N', '75.80 E', 'Karnataka'), (452, 'Hassan', '13.01 N', '76.08 E', 'Karnataka'), (453, 'Haveri', '14.80 N', '75.40 E', 'Karnataka'), (454, 'Hiriyur', '13.97 N', '76.60 E', 'Karnataka'), (455, 'Hosakote', '', '', 'Karnataka'), (456, 'Hospet', '15.28 N', '76.37 E', 'Karnataka'), (457, 'Hubli', '15.36 N', '75.13 E', 'Karnataka'), (458, 'Ilkal', '15.97 N', '76.13 E', 'Karnataka'), (459, 'Jamkhandi', '16.51 N', '75.28 E', 'Karnataka'), (460, 'Kanakapura', '12.54 N', '77.42 E', 'Karnataka'), (461, 'Karwar', '14.82 N', '74.12 E', 'Karnataka'), (462, 'Kolar', '13.14 N', '78.13 E', 'Karnataka'), (463, 'Kollegal', '12.15 N', '77.12 E', 'Karnataka'), (464, 'Koppal', '15.35 N', '76.15 E', 'Karnataka'), (465, 'Krishnarajapura', '12.97 N', '77.74 E', 'Karnataka'), (466, 'Mahadevapura', '', '', 'Karnataka'), (467, 'Maisuru', '12.31 N', '76.65 E', 'Karnataka'), (468, 'Mandya', '12.54 N', '76.89 E', 'Karnataka'), (469, 'Mangaluru', '12.88 N', '74.84 E', 'Karnataka'), (470, 'Nipani', '16.41 N', '74.38 E', 'Karnataka'), (471, 'Pattanagere', '', '', 'Karnataka'), (472, 'Puttur', '12.77 N', '75.22 E', 'Karnataka'), (473, 'Rabkavi', '16.47 N', '75.11 E', 'Karnataka'), (474, 'Raichur', '16.21 N', '77.35 E', 'Karnataka'), (475, 'Ramanagaram', '12.72 N', '77.27 E', 'Karnataka'), (476, 'Ranibennur', '14.62 N', '75.61 E', 'Karnataka'), (477, 'Robertsonpet', '12.97 N', '78.28 E', 'Karnataka'), (478, 'Sagar', '14.17 N', '75.03 E', 'Karnataka'), (479, 'Shahabad', '17.13 N', '76.93 E', 'Karnataka'), (480, 'Shahpur', '16.70 N', '76.83 E', 'Karnataka'), (481, 'Shimoga', '13.93 N', '75.57 E', 'Karnataka'), (482, 'Shorapur', '16.52 N', '76.75 E', 'Karnataka'), (483, 'Sidlaghatta', '13.38 N', '77.87 E', 'Karnataka'), (484, 'Sira', '13.75 N', '76.90 E', 'Karnataka'), (485, 'Sirsi', '14.62 N', '74.85 E', 'Karnataka'), (486, 'Tiptur', '13.27 N', '76.48 E', 'Karnataka'), (487, 'Tumkur', '13.34 N', '77.10 E', 'Karnataka'), (488, 'Udupi', '13.35 N', '74.75 E', 'Karnataka'), (489, 'Ullal', '12.80 N', '74.85 E', 'Karnataka'), (490, 'Yadgir', '16.77 N', '77.13 E', 'Karnataka'), (491, 'Yelahanka', '13.10 N', '77.60 E', 'Karnataka'), (492, 'Alappuzha', '9.50 N', '76.33 E', 'Kerala'), (493, 'Beypur', '11.18 N', '75.82 E', 'Kerala'), (494, 'Cheruvannur', '11.21 N', '75.84 E', 'Kerala'), (495, 'Edakkara', '', '', 'Kerala'), (496, 'Edathala', '10.03 N', '76.32 E', 'Kerala'), (497, 'Kalamassery', '10.05 N', '76.27 E', 'Kerala'), (498, 'Kannan Devan Hills', '', '', 'Kerala'), (499, 'Kannangad', '12.34 N', '75.09 E', 'Kerala'), (500, 'Kannur', '11.86 N', '75.35 E', 'Kerala'), (501, 'Kayankulam', '9.17 N', '76.49 E', 'Kerala'), (502, 'Kochi', '10.02 N', '76.22 E', 'Kerala'), (503, 'Kollam', '8.89 N', '76.58 E', 'Kerala'), (504, 'Kottayam', '9.60 N', '76.52 E', 'Kerala'), (505, 'Koyilandi', '11.43 N', '75.70 E', 'Kerala'), (506, 'Kozhikkod', '11.26 N', '75.78 E', 'Kerala'), (507, 'Kunnamkulam', '10.65 N', '76.08 E', 'Kerala'), (508, 'Malappuram', '11.07 N', '76.06 E', 'Kerala'), (509, 'Manjeri', '11.12 N', '76.11 E', 'Kerala'), (510, 'Nedumangad', '8.61 N', '77.00 E', 'Kerala'), (511, 'Neyyattinkara', '8.40 N', '77.08 E', 'Kerala'), (512, 'Palakkad', '10.78 N', '76.65 E', 'Kerala'), (513, 'Pallichal', '', '', 'Kerala'), (514, 'Payyannur', '12.10 N', '75.19 E', 'Kerala'), (515, 'Ponnani', '10.78 N', '75.92 E', 'Kerala'), (516, 'Talipparamba', '12.03 N', '75.36 E', 'Kerala'), (517, 'Thalassery', '11.75 N', '75.49 E', 'Kerala'), (518, 'Thiruvananthapuram', '8.51 N', '76.95 E', 'Kerala'), (519, 'Thrippunithura', '9.94 N', '76.35 E', 'Kerala'), (520, 'Thrissur', '10.52 N', '76.21 E', 'Kerala'), (521, 'Tirur', '10.91 N', '75.92 E', 'Kerala'), (522, 'Tiruvalla', '9.39 N', '76.57 E', 'Kerala'), (523, 'Vadakara', '11.61 N', '75.58 E', 'Kerala'), (524, 'Ashoknagar', '24.57 N', '77.72 E', 'Madhya Pradesh'), (525, 'Balaghat', '21.80 N', '80.18 E', 'Madhya Pradesh'), (526, 'Basoda', '23.85 N', '77.93 E', 'Madhya Pradesh'), (527, 'Betul', '21.92 N', '77.90 E', 'Madhya Pradesh'), (528, 'Bhind', '26.57 N', '78.77 E', 'Madhya Pradesh'), (529, 'Bhopal', '23.24 N', '77.40 E', 'Madhya Pradesh'), (530, 'BinaEtawa', '24.20 N', '78.20 E', 'Madhya Pradesh'), (531, 'Burhanpur', '21.33 N', '76.22 E', 'Madhya Pradesh'), (532, 'Chhatarpur', '24.92 N', '79.58 E', 'Madhya Pradesh'), (533, 'Chhindwara', '22.07 N', '78.94 E', 'Madhya Pradesh'), (534, 'Dabra', '25.90 N', '78.33 E', 'Madhya Pradesh'), (535, 'Damoh', '23.85 N', '79.44 E', 'Madhya Pradesh'), (536, 'Datia', '25.67 N', '78.45 E', 'Madhya Pradesh'), (537, 'Dewas', '22.97 N', '76.05 E', 'Madhya Pradesh'), (538, 'Dhar', '22.60 N', '75.29 E', 'Madhya Pradesh'), (539, 'Gohad', '26.43 N', '78.45 E', 'Madhya Pradesh'), (540, 'Guna', '24.65 N', '77.30 E', 'Madhya Pradesh'), (541, 'Gwalior', '26.23 N', '78.17 E', 'Madhya Pradesh'), (542, 'Harda', '22.33 N', '77.11 E', 'Madhya Pradesh'), (543, 'Hoshangabad', '22.75 N', '77.71 E', 'Madhya Pradesh'), (544, 'Indore', '22.72 N', '75.86 E', 'Madhya Pradesh'), (545, 'Itarsi', '22.62 N', '77.76 E', 'Madhya Pradesh'), (546, 'Jabalpur', '23.17 N', '79.94 E', 'Madhya Pradesh'), (547, 'Jabalpur Cantonment', '23.16 N', '79.95 E', 'Madhya Pradesh'), (548, 'Jaora', '23.64 N', '75.11 E', 'Madhya Pradesh'), (549, 'Khandwa', '21.83 N', '76.35 E', 'Madhya Pradesh'), (550, 'Khargone', '21.83 N', '75.60 E', 'Madhya Pradesh'), (551, 'Mandidip', '23.10 N', '77.52 E', 'Madhya Pradesh'), (552, 'Mandsaur', '24.07 N', '75.07 E', 'Madhya Pradesh'), (553, 'Mau', '22.56 N', '75.75 E', 'Madhya Pradesh'), (554, 'Morena', '26.51 N', '77.99 E', 'Madhya Pradesh'), (555, 'Murwara', '23.85 N', '80.39 E', 'Madhya Pradesh'), (556, 'Nagda', '23.46 N', '75.42 E', 'Madhya Pradesh'), (557, 'Nimach', '24.47 N', '74.87 E', 'Madhya Pradesh'), (558, 'Pithampur', '', '', 'Madhya Pradesh'), (559, 'Raghogarh', '24.45 N', '77.20 E', 'Madhya Pradesh'), (560, 'Ratlam', '23.35 N', '75.03 E', 'Madhya Pradesh'), (561, 'Rewa', '24.53 N', '81.29 E', 'Madhya Pradesh'), (562, 'Sagar', '23.85 N', '78.75 E', 'Madhya Pradesh'), (563, 'Sarni', '22.04 N', '78.27 E', 'Madhya Pradesh'), (564, 'Satna', '24.58 N', '80.83 E', 'Madhya Pradesh'), (565, 'Sehore', '23.20 N', '77.08 E', 'Madhya Pradesh'), (566, 'Sendhwa', '21.68 N', '75.10 E', 'Madhya Pradesh'), (567, 'Seoni', '22.10 N', '79.55 E', 'Madhya Pradesh'), (568, 'Shahdol', '23.30 N', '81.36 E', 'Madhya Pradesh'), (569, 'Shajapur', '23.43 N', '76.27 E', 'Madhya Pradesh'), (570, 'Sheopur', '25.67 N', '76.70 E', 'Madhya Pradesh'), (571, 'Shivapuri', '25.43 N', '77.65 E', 'Madhya Pradesh'), (572, 'Sidhi', '24.42 N', '81.88 E', 'Madhya Pradesh'), (573, 'Singrauli', '23.84 N', '82.27 E', 'Madhya Pradesh'), (574, 'Tikamgarh', '24.74 N', '78.83 E', 'Madhya Pradesh'), (575, 'Ujjain', '23.19 N', '75.78 E', 'Madhya Pradesh'), (576, 'Vidisha', '23.53 N', '77.80 E', 'Madhya Pradesh'), (577, 'Achalpur', '21.26 N', '77.50 E', 'Maharashtra'), (578, 'Ahmadnagar', '19.10 N', '74.74 E', 'Maharashtra'), (579, 'Akola', '20.71 N', '77.00 E', 'Maharashtra'), (580, 'Akot', '21.10 N', '77.05 E', 'Maharashtra'), (581, 'Amalner', '21.05 N', '75.06 E', 'Maharashtra'), (582, 'Ambajogai', '18.73 N', '76.38 E', 'Maharashtra'), (583, 'Amravati', '20.95 N', '77.76 E', 'Maharashtra'), (584, 'Anjangaon', '21.16 N', '77.31 E', 'Maharashtra'), (585, 'Aurangabad', '19.89 N', '75.32 E', 'Maharashtra'), (586, 'Badlapur', '19.15 N', '73.27 E', 'Maharashtra'), (587, 'Ballarpur', '19.85 N', '79.35 E', 'Maharashtra'), (588, 'Baramati', '18.15 N', '74.58 E', 'Maharashtra'), (589, 'Barsi', '18.24 N', '75.69 E', 'Maharashtra'), (590, 'Basmat', '19.32 N', '77.17 E', 'Maharashtra'), (591, 'Bhadravati', '20.11 N', '79.12 E', 'Maharashtra'), (592, 'Bhandara', '21.18 N', '79.65 E', 'Maharashtra'), (593, 'Bhiwandi', '19.30 N', '73.05 E', 'Maharashtra'), (594, 'Bhusawal', '21.05 N', '75.78 E', 'Maharashtra'), (595, 'Bid', '18.99 N', '75.76 E', 'Maharashtra'), (596, 'Mumbai', '18.96 N', '72.82 E', 'Maharashtra'), (597, 'Buldana', '20.54 N', '76.18 E', 'Maharashtra'), (598, 'Chalisgaon', '20.46 N', '74.99 E', 'Maharashtra'), (599, 'Chandrapur', '19.96 N', '79.30 E', 'Maharashtra'), (600, 'Chikhli', '20.35 N', '76.25 E', 'Maharashtra'), (601, 'Chiplun', '17.53 N', '73.52 E', 'Maharashtra'), (602, 'Chopda', '21.25 N', '75.28 E', 'Maharashtra'), (603, 'Dahanu', '19.97 N', '72.73 E', 'Maharashtra'), (604, 'Deolali', '19.95 N', '73.84 E', 'Maharashtra'), (605, 'Dhule', '20.90 N', '74.77 E', 'Maharashtra'), (606, 'Digdoh', '', '', 'Maharashtra'), (607, 'Diglur', '18.55 N', '77.60 E', 'Maharashtra'), (608, 'Gadchiroli', '20.17 N', '80.00 E', 'Maharashtra'), (609, 'Gondiya', '21.47 N', '80.20 E', 'Maharashtra'), (610, 'Hinganghat', '20.56 N', '78.83 E', 'Maharashtra'), (611, 'Hingoli', '19.72 N', '77.14 E', 'Maharashtra'), (612, 'Ichalkaranji', '16.69 N', '74.46 E', 'Maharashtra'), (613, 'Jalgaon', '21.01 N', '75.56 E', 'Maharashtra'), (614, 'Jalna', '19.85 N', '75.88 E', 'Maharashtra'), (615, 'Kalyan', '19.25 N', '73.16 E', 'Maharashtra'), (616, 'Kamthi', '21.23 N', '79.20 E', 'Maharashtra'), (617, 'Karanja', '20.48 N', '77.48 E', 'Maharashtra'), (618, 'Khadki', '18.57 N', '73.83 E', 'Maharashtra'), (619, 'Khamgaon', '20.70 N', '76.56 E', 'Maharashtra'), (620, 'Khopoli', '18.78 N', '73.33 E', 'Maharashtra'), (621, 'Kolhapur', '16.70 N', '74.22 E', 'Maharashtra'), (622, 'Kopargaon', '19.88 N', '74.48 E', 'Maharashtra'), (623, 'Latur', '18.41 N', '76.58 E', 'Maharashtra'), (624, 'Lonavale', '18.75 N', '73.42 E', 'Maharashtra'), (625, 'Malegaon', '20.56 N', '74.52 E', 'Maharashtra'), (626, 'Malkapur', '20.90 N', '76.19 E', 'Maharashtra'), (627, 'Manmad', '20.26 N', '74.43 E', 'Maharashtra'), (628, 'Mira Bhayandar', '19.29 N', '72.85 E', 'Maharashtra'), (629, 'Nagpur', '21.16 N', '79.08 E', 'Maharashtra'), (630, 'Nalasopara', '19.43 N', '72.78 E', 'Maharashtra'), (631, 'Nanded', '19.17 N', '77.29 E', 'Maharashtra'), (632, 'Nandurbar', '21.38 N', '74.23 E', 'Maharashtra'), (633, 'Nashik', '20.01 N', '73.78 E', 'Maharashtra'), (634, 'Navghar', '19.34 N', '72.90 E', 'Maharashtra'), (635, 'Navi Mumbai', '19.11 N', '73.06 E', 'Maharashtra'), (636, 'Navi Mumbai', '19.00 N', '73.10 E', 'Maharashtra'), (637, 'Osmanabad', '18.17 N', '76.03 E', 'Maharashtra'), (638, 'Palghar', '19.68 N', '72.75 E', 'Maharashtra'), (639, 'Pandharpur', '17.68 N', '75.31 E', 'Maharashtra'), (640, 'Parbhani', '19.27 N', '76.76 E', 'Maharashtra'), (641, 'Phaltan', '17.98 N', '74.43 E', 'Maharashtra'), (642, 'Pimpri', '18.62 N', '73.80 E', 'Maharashtra'), (643, 'Pune', '18.53 N', '73.84 E', 'Maharashtra'), (644, 'Pune Cantonment', '18.50 N', '73.88 E', 'Maharashtra'), (645, 'Pusad', '19.91 N', '77.57 E', 'Maharashtra'), (646, 'Ratnagiri', '17.00 N', '73.29 E', 'Maharashtra'), (647, 'SangliMiraj', '16.86 N', '74.57 E', 'Maharashtra'), (648, 'Satara', '17.70 N', '74.00 E', 'Maharashtra'), (649, 'Shahada', '21.55 N', '74.47 E', 'Maharashtra'), (650, 'Shegaon', '20.78 N', '76.68 E', 'Maharashtra'), (651, 'Shirpur', '21.35 N', '74.88 E', 'Maharashtra'), (652, 'Sholapur', '17.67 N', '75.89 E', 'Maharashtra'), (653, 'Shrirampur', '19.63 N', '74.64 E', 'Maharashtra'), (654, 'Sillod', '20.30 N', '75.65 E', 'Maharashtra'), (655, 'Thana', '19.20 N', '72.97 E', 'Maharashtra'), (656, 'Udgir', '18.40 N', '77.11 E', 'Maharashtra'), (657, 'Ulhasnagar', '19.23 N', '73.15 E', 'Maharashtra'), (658, 'Uran Islampur', '17.05 N', '74.27 E', 'Maharashtra'), (659, 'Vasai', '19.36 N', '72.80 E', 'Maharashtra'), (660, 'Virar', '19.47 N', '72.79 E', 'Maharashtra'), (661, 'Wadi', '', '', 'Maharashtra'), (662, 'Wani', '20.07 N', '78.95 E', 'Maharashtra'), (663, 'Wardha', '20.75 N', '78.60 E', 'Maharashtra'), (664, 'Warud', '21.47 N', '78.27 E', 'Maharashtra'), (665, 'Washim', '20.10 N', '77.13 E', 'Maharashtra'), (666, 'Yavatmal', '20.41 N', '78.13 E', 'Maharashtra'), (667, 'Imphal', '24.79 N', '93.94 E', 'Manipur'), (668, 'Shillong', '25.57 N', '91.87 E', 'Meghalaya'), (669, 'Tura', '25.52 N', '90.22 E', 'Meghalaya'), (670, 'Aizawl', '23.71 N', '92.71 E', 'Mizoram'), (671, 'Lunglei', '22.88 N', '92.73 E', 'Mizoram'), (672, 'Dimapur', '25.92 N', '93.73 E', 'Nagaland'), (673, 'Kohima', '25.67 N', '94.11 E', 'Nagaland'), (674, 'Wokha', '26.10 N', '94.27 E', 'Nagaland'), (675, 'Balangir', '20.71 N', '83.50 E', 'Orissa'), (676, 'Baleshwar', '21.49 N', '86.95 E', 'Orissa'), (677, 'Barbil', '22.12 N', '85.40 E', 'Orissa'), (678, 'Bargarh', '21.34 N', '83.61 E', 'Orissa'), (679, 'Baripada', '21.95 N', '86.73 E', 'Orissa'), (680, 'Bhadrak', '21.06 N', '86.52 E', 'Orissa'), (681, 'Bhawanipatna', '19.91 N', '83.17 E', 'Orissa'), (682, 'Bhubaneswar', '20.27 N', '85.84 E', 'Orissa'), (683, 'Brahmapur', '19.32 N', '84.80 E', 'Orissa'), (684, 'Brajrajnagar', '21.82 N', '83.91 E', 'Orissa'), (685, 'Dhenkanal', '20.67 N', '85.60 E', 'Orissa'), (686, 'Jaypur', '18.86 N', '82.56 E', 'Orissa'), (687, 'Jharsuguda', '21.87 N', '84.01 E', 'Orissa'), (688, 'Kataka', '20.47 N', '85.88 E', 'Orissa'), (689, 'Kendujhar', '21.63 N', '85.58 E', 'Orissa'), (690, 'Paradwip', '20.32 N', '86.62 E', 'Orissa'), (691, 'Puri', '19.81 N', '85.83 E', 'Orissa'), (692, 'Raurkela', '22.24 N', '84.81 E', 'Orissa'), (693, 'Raurkela Industrial Township', '', '', 'Orissa'), (694, 'Rayagada', '19.18 N', '83.41 E', 'Orissa'), (695, 'Sambalpur', '21.47 N', '83.97 E', 'Orissa'), (696, 'Sunabeda', '18.69 N', '82.86 E', 'Orissa'), (697, 'Karaikal', '10.93 N', '79.83 E', 'Pondicherry'), (698, 'Ozhukarai', '11.94 N', '79.77 E', 'Pondicherry'), (699, 'Pondicherry', '11.94 N', '79.83 E', 'Pondicherry'), (700, 'Abohar', '30.14 N', '74.20 E', 'Punjab'), (701, 'Amritsar', '31.64 N', '74.87 E', 'Punjab'), (702, 'Barnala', '30.39 N', '75.54 E', 'Punjab'), (703, 'Batala', '31.82 N', '75.21 E', 'Punjab'), (704, 'Bathinda', '30.17 N', '74.97 E', 'Punjab'), (705, 'Dhuri', '30.37 N', '75.87 E', 'Punjab'), (706, 'Faridkot', '30.68 N', '74.74 E', 'Punjab'), (707, 'Fazilka', '30.41 N', '74.02 E', 'Punjab'), (708, 'Firozpur', '30.92 N', '74.61 E', 'Punjab'), (709, 'Firozpur Cantonment', '30.95 N', '74.60 E', 'Punjab'), (710, 'Gobindgarh', '30.66 N', '76.31 E', 'Punjab'), (711, 'Gurdaspur', '32.04 N', '75.40 E', 'Punjab'), (712, 'Hoshiarpur', '31.53 N', '75.91 E', 'Punjab'), (713, 'Jagraon', '30.78 N', '75.48 E', 'Punjab'), (714, 'Jalandhar', '31.33 N', '75.57 E', 'Punjab'), (715, 'Kapurthala', '31.38 N', '75.38 E', 'Punjab'), (716, 'Khanna', '30.71 N', '76.21 E', 'Punjab'), (717, 'Kot Kapura', '30.59 N', '74.80 E', 'Punjab'), (718, 'Ludhiana', '30.91 N', '75.84 E', 'Punjab'), (719, 'Malaut', '30.23 N', '74.48 E', 'Punjab'), (720, 'Maler Kotla', '30.54 N', '75.87 E', 'Punjab'), (721, 'Mansa', '29.98 N', '75.39 E', 'Punjab'), (722, 'Moga', '30.82 N', '75.17 E', 'Punjab'), (723, 'Mohali', '30.78 N', '76.69 E', 'Punjab'), (724, 'Pathankot', '32.27 N', '75.64 E', 'Punjab'), (725, 'Patiala', '30.32 N', '76.39 E', 'Punjab'), (726, 'Phagwara', '31.22 N', '75.76 E', 'Punjab'), (727, 'Rajpura', '30.48 N', '76.59 E', 'Punjab'), (728, 'Rupnagar', '30.98 N', '76.52 E', 'Punjab'), (729, 'Samana', '30.15 N', '76.20 E', 'Punjab'), (730, 'Sangrur', '30.25 N', '75.84 E', 'Punjab'), (731, 'Sirhind', '30.65 N', '76.38 E', 'Punjab'), (732, 'Sunam', '30.13 N', '75.80 E', 'Punjab'), (733, 'Tarn Taran', '31.45 N', '74.92 E', 'Punjab'), (734, 'Ajmer', '26.45 N', '74.64 E', 'Rajasthan'), (735, 'Alwar', '27.56 N', '76.60 E', 'Rajasthan'), (736, 'Balotra', '25.83 N', '72.23 E', 'Rajasthan'), (737, 'Banswara', '23.54 N', '74.44 E', 'Rajasthan'), (738, 'Baran', '25.10 N', '76.51 E', 'Rajasthan'), (739, 'Bari', '26.65 N', '77.60 E', 'Rajasthan'), (740, 'Barmer', '25.75 N', '71.39 E', 'Rajasthan'), (741, 'Beawar', '26.10 N', '74.30 E', 'Rajasthan'), (742, 'Bharatpur', '27.23 N', '77.49 E', 'Rajasthan'), (743, 'Bhilwara', '25.35 N', '74.63 E', 'Rajasthan'), (744, 'Bhiwadi', '', '', 'Rajasthan'), (745, 'Bikaner', '28.03 N', '73.32 E', 'Rajasthan'), (746, 'Bundi', '25.45 N', '75.63 E', 'Rajasthan'), (747, 'Chittaurgarh', '24.89 N', '74.63 E', 'Rajasthan'), (748, 'Chomun', '27.17 N', '75.72 E', 'Rajasthan'), (749, 'Churu', '28.31 N', '74.96 E', 'Rajasthan'), (750, 'Daosa', '26.88 N', '76.33 E', 'Rajasthan'), (751, 'Dhaulpur', '26.70 N', '77.87 E', 'Rajasthan'), (752, 'Didwana', '27.39 N', '74.57 E', 'Rajasthan'), (753, 'Fatehpur', '27.99 N', '74.95 E', 'Rajasthan'), (754, 'Ganganagar', '29.93 N', '73.86 E', 'Rajasthan'), (755, 'Gangapur', '26.47 N', '76.72 E', 'Rajasthan'), (756, 'Hanumangarh', '29.62 N', '74.29 E', 'Rajasthan'), (757, 'Hindaun', '26.74 N', '77.02 E', 'Rajasthan'), (758, 'Jaipur', '26.92 N', '75.80 E', 'Rajasthan'), (759, 'Jaisalmer', '26.92 N', '70.90 E', 'Rajasthan'), (760, 'Jalor', '25.35 N', '72.62 E', 'Rajasthan'), (761, 'Jhalawar', '24.60 N', '76.15 E', 'Rajasthan'), (762, 'Jhunjhunun', '28.13 N', '75.39 E', 'Rajasthan'), (763, 'Jodhpur', '26.29 N', '73.02 E', 'Rajasthan'), (764, 'Karauli', '26.50 N', '77.02 E', 'Rajasthan'), (765, 'Kishangarh', '26.58 N', '74.86 E', 'Rajasthan'), (766, 'Kota', '25.18 N', '75.83 E', 'Rajasthan'), (767, 'Kuchaman', '27.15 N', '74.85 E', 'Rajasthan'), (768, 'Ladnun', '27.64 N', '74.38 E', 'Rajasthan'), (769, 'Makrana', '27.05 N', '74.72 E', 'Rajasthan'), (770, 'Nagaur', '27.21 N', '73.73 E', 'Rajasthan'), (771, 'Nawalgarh', '27.85 N', '75.27 E', 'Rajasthan'), (772, 'Nimbahera', '24.62 N', '74.68 E', 'Rajasthan'), (773, 'Nokha', '27.60 N', '73.42 E', 'Rajasthan'), (774, 'Pali', '25.79 N', '73.32 E', 'Rajasthan'), (775, 'Rajsamand', '25.07 N', '73.88 E', 'Rajasthan'), (776, 'Ratangarh', '28.09 N', '74.60 E', 'Rajasthan'), (777, 'Sardarshahr', '28.45 N', '74.48 E', 'Rajasthan'), (778, 'Sawai Madhopur', '26.03 N', '76.34 E', 'Rajasthan'), (779, 'Sikar', '27.61 N', '75.13 E', 'Rajasthan'), (780, 'Sujangarh', '27.70 N', '74.46 E', 'Rajasthan'), (781, 'Suratgarh', '29.32 N', '73.90 E', 'Rajasthan'), (782, 'Tonk', '26.17 N', '75.78 E', 'Rajasthan'), (783, 'Udaipur', '24.58 N', '73.69 E', 'Rajasthan'), (784, 'Alandur', '13.03 N', '80.23 E', 'Tamil Nadu'), (785, 'Ambattur', '13.11 N', '80.17 E', 'Tamil Nadu'), (786, 'Ambur', '12.80 N', '78.72 E', 'Tamil Nadu'), (787, 'Arakonam', '13.08 N', '79.67 E', 'Tamil Nadu'), (788, 'Arani', '12.68 N', '79.28 E', 'Tamil Nadu'), (789, 'Aruppukkottai', '9.51 N', '78.09 E', 'Tamil Nadu'), (790, 'Attur', '11.60 N', '78.60 E', 'Tamil Nadu'), (791, 'Avadi', '13.12 N', '80.11 E', 'Tamil Nadu'), (792, 'Avaniapuram', '9.86 N', '78.12 E', 'Tamil Nadu'), (793, 'Bodinayakkanur', '10.01 N', '77.35 E', 'Tamil Nadu'), (794, 'Chengalpattu', '12.70 N', '79.97 E', 'Tamil Nadu'), (795, 'Dharapuram', '10.74 N', '77.52 E', 'Tamil Nadu'), (796, 'Dharmapuri', '12.13 N', '78.16 E', 'Tamil Nadu'), (797, 'Dindigul', '10.36 N', '77.97 E', 'Tamil Nadu'), (798, 'Erode', '11.35 N', '77.73 E', 'Tamil Nadu'), (799, 'Gopichettipalaiyam', '11.46 N', '77.43 E', 'Tamil Nadu'), (800, 'Gudalur', '11.76 N', '79.75 E', 'Tamil Nadu'), (801, 'Gudiyattam', '12.95 N', '78.86 E', 'Tamil Nadu'), (802, 'Hosur', '12.72 N', '77.82 E', 'Tamil Nadu'), (803, 'Idappadi', '11.58 N', '77.85 E', 'Tamil Nadu'), (804, 'Kadayanallur', '9.08 N', '77.35 E', 'Tamil Nadu'), (805, 'Kambam', '9.74 N', '77.28 E', 'Tamil Nadu'), (806, 'Kanchipuram', '12.84 N', '79.70 E', 'Tamil Nadu'), (807, 'Karur', '10.96 N', '78.07 E', 'Tamil Nadu'), (808, 'Kavundampalaiyam', '11.05 N', '76.92 E', 'Tamil Nadu'), (809, 'Kovilpatti', '9.19 N', '77.86 E', 'Tamil Nadu'), (810, 'Koyampattur', '11.01 N', '76.96 E', 'Tamil Nadu'), (811, 'Krishnagiri', '12.54 N', '78.21 E', 'Tamil Nadu'), (812, 'Kumarapalaiyam', '11.44 N', '77.73 E', 'Tamil Nadu'), (813, 'Kumbakonam', '10.97 N', '79.38 E', 'Tamil Nadu'), (814, 'Kuniyamuthur', '10.98 N', '76.95 E', 'Tamil Nadu'), (815, 'Kurichi', '10.92 N', '76.96 E', 'Tamil Nadu'), (816, 'Madhavaram', '13.02 N', '80.26 E', 'Tamil Nadu'), (817, 'Madras', '13.09 N', '80.27 E', 'Tamil Nadu'), (818, 'Madurai', '9.92 N', '78.12 E', 'Tamil Nadu'), (819, 'Maduravoyal', '', '', 'Tamil Nadu'), (820, 'Mannargudi', '10.67 N', '79.45 E', 'Tamil Nadu'), (821, 'Mayiladuthurai', '11.11 N', '79.65 E', 'Tamil Nadu'), (822, 'Mettupalayam', '11.30 N', '76.94 E', 'Tamil Nadu'), (823, 'Mettur', '11.80 N', '77.80 E', 'Tamil Nadu'), (824, 'Nagapattinam', '10.80 N', '79.84 E', 'Tamil Nadu'), (825, 'Nagercoil', '8.18 N', '77.43 E', 'Tamil Nadu'), (826, 'Namakkal', '11.23 N', '78.17 E', 'Tamil Nadu'), (827, 'Nerkunram', '13.04 N', '80.26 E', 'Tamil Nadu'), (828, 'Neyveli', '11.62 N', '79.48 E', 'Tamil Nadu'), (829, 'Pallavaram', '12.99 N', '80.16 E', 'Tamil Nadu'), (830, 'Pammal', '12.97 N', '80.11 E', 'Tamil Nadu'), (831, 'Pannuratti', '11.78 N', '79.55 E', 'Tamil Nadu'), (832, 'Paramakkudi', '9.54 N', '78.59 E', 'Tamil Nadu'), (833, 'Pattukkottai', '10.43 N', '79.31 E', 'Tamil Nadu'), (834, 'Pollachi', '10.67 N', '77.00 E', 'Tamil Nadu'), (835, 'Pudukkottai', '10.39 N', '78.82 E', 'Tamil Nadu'), (836, 'Puliyankudi', '9.18 N', '77.40 E', 'Tamil Nadu'), (837, 'Punamalli', '13.05 N', '80.11 E', 'Tamil Nadu'), (838, 'Rajapalaiyam', '9.46 N', '77.55 E', 'Tamil Nadu'), (839, 'Ramanathapuram', '9.37 N', '78.83 E', 'Tamil Nadu'), (840, 'Salem', '11.67 N', '78.16 E', 'Tamil Nadu'), (841, 'Sankarankoil', '9.17 N', '77.54 E', 'Tamil Nadu'), (842, 'Sivakasi', '9.46 N', '77.79 E', 'Tamil Nadu'), (843, 'Srivilliputtur', '9.52 N', '77.63 E', 'Tamil Nadu'), (844, 'Tambaram', '12.93 N', '80.12 E', 'Tamil Nadu'), (845, 'Tenkasi', '8.96 N', '77.31 E', 'Tamil Nadu'), (846, 'Thanjavur', '10.79 N', '79.13 E', 'Tamil Nadu'), (847, 'Theni Allinagaram', '10.02 N', '77.48 E', 'Tamil Nadu'), (848, 'Thiruthangal', '9.48 N', '77.83 E', 'Tamil Nadu'), (849, 'Thiruvarur', '10.78 N', '79.64 E', 'Tamil Nadu'), (850, 'Thuthukkudi', '8.81 N', '78.14 E', 'Tamil Nadu'), (851, 'Tindivanam', '12.24 N', '79.65 E', 'Tamil Nadu'), (852, 'Tiruchchirappalli', '10.81 N', '78.69 E', 'Tamil Nadu'), (853, 'Tiruchengode', '11.38 N', '77.90 E', 'Tamil Nadu'), (854, 'Tirunelveli', '8.73 N', '77.69 E', 'Tamil Nadu'), (855, 'Tirupathur', '12.50 N', '78.57 E', 'Tamil Nadu'), (856, 'Tiruppur', '11.09 N', '77.35 E', 'Tamil Nadu'), (857, 'Tiruvannamalai', '12.24 N', '79.07 E', 'Tamil Nadu'), (858, 'Tiruvottiyur', '13.16 N', '80.29 E', 'Tamil Nadu'), (859, 'Udagamandalam', '11.42 N', '76.69 E', 'Tamil Nadu'), (860, 'Udumalaipettai', '10.58 N', '77.24 E', 'Tamil Nadu'), (861, 'Valparai', '10.38 N', '76.99 E', 'Tamil Nadu'), (862, 'Vaniyambadi', '12.69 N', '78.60 E', 'Tamil Nadu'), (863, 'Velampalaiyam', '', '', 'Tamil Nadu'), (864, 'Velluru', '12.92 N', '79.13 E', 'Tamil Nadu'), (865, 'Viluppuram', '11.95 N', '79.49 E', 'Tamil Nadu'), (866, 'Virappanchatram', '11.40 N', '77.70 E', 'Tamil Nadu'), (867, 'Virudhachalam', '11.51 N', '79.32 E', 'Tamil Nadu'), (868, 'Virudunagar', '9.59 N', '77.95 E', 'Tamil Nadu'), (869, 'Agartala', '23.84 N', '91.27 E', 'Tripura'), (870, 'Agartala MCl', '', '', 'Tripura'), (871, 'Badharghat', '', '', 'Tripura'), (872, 'Agra', '27.19 N', '78.01 E', 'Uttar Pradesh'), (873, 'Aligarh', '27.89 N', '78.06 E', 'Uttar Pradesh'), (874, 'Allahabad', '25.45 N', '81.84 E', 'Uttar Pradesh'), (875, 'Amroha', '28.91 N', '78.46 E', 'Uttar Pradesh'), (876, 'Aonla', '28.28 N', '79.15 E', 'Uttar Pradesh'), (877, 'Auraiya', '26.47 N', '79.50 E', 'Uttar Pradesh'), (878, 'Ayodhya', '26.80 N', '82.20 E', 'Uttar Pradesh'), (879, 'Azamgarh', '26.07 N', '83.18 E', 'Uttar Pradesh'), (880, 'Baheri', '28.78 N', '79.50 E', 'Uttar Pradesh'), (881, 'Bahraich', '27.58 N', '81.59 E', 'Uttar Pradesh'), (882, 'Ballia', '25.76 N', '84.15 E', 'Uttar Pradesh'), (883, 'Balrampur', '27.43 N', '82.18 E', 'Uttar Pradesh'), (884, 'Banda', '25.48 N', '80.33 E', 'Uttar Pradesh'), (885, 'Baraut', '29.10 N', '77.26 E', 'Uttar Pradesh'), (886, 'Bareli', '28.36 N', '79.41 E', 'Uttar Pradesh'), (887, 'Basti', '26.80 N', '82.74 E', 'Uttar Pradesh'), (888, 'Behta Hajipur', '', '', 'Uttar Pradesh'), (889, 'Bela', '25.92 N', '81.99 E', 'Uttar Pradesh'), (890, 'Bhadohi', '25.40 N', '82.56 E', 'Uttar Pradesh'), (891, 'Bijnor', '29.38 N', '78.13 E', 'Uttar Pradesh'), (892, 'Bisalpur', '28.30 N', '79.80 E', 'Uttar Pradesh'), (893, 'Biswan', '27.50 N', '81.00 E', 'Uttar Pradesh'), (894, 'Budaun', '28.04 N', '79.12 E', 'Uttar Pradesh'), (895, 'Bulandshahr', '28.41 N', '77.85 E', 'Uttar Pradesh'), (896, 'Chandausi', '28.46 N', '78.78 E', 'Uttar Pradesh'), (897, 'Chandpur', '29.14 N', '78.27 E', 'Uttar Pradesh'), (898, 'Chhibramau', '27.15 N', '79.52 E', 'Uttar Pradesh'), (899, 'Chitrakut Dham', '25.20 N', '80.84 E', 'Uttar Pradesh'), (900, 'Dadri', '28.57 N', '77.55 E', 'Uttar Pradesh'), (901, 'Deoband', '29.70 N', '77.67 E', 'Uttar Pradesh'), (902, 'Deoria', '26.51 N', '83.78 E', 'Uttar Pradesh'), (903, 'Etah', '27.57 N', '78.64 E', 'Uttar Pradesh'), (904, 'Etawah', '26.78 N', '79.01 E', 'Uttar Pradesh'), (905, 'Faizabad', '26.78 N', '82.14 E', 'Uttar Pradesh'), (906, 'Faridpur', '28.22 N', '79.53 E', 'Uttar Pradesh'), (907, 'Farrukhabad', '27.40 N', '79.57 E', 'Uttar Pradesh'), (908, 'Fatehpur', '25.93 N', '80.81 E', 'Uttar Pradesh'), (909, 'Firozabad', '27.15 N', '78.39 E', 'Uttar Pradesh'), (910, 'Gajraula', '28.85 N', '78.23 E', 'Uttar Pradesh'), (911, 'Ganga Ghat', '26.52 N', '80.45 E', 'Uttar Pradesh'), (912, 'Gangoh', '29.77 N', '77.25 E', 'Uttar Pradesh'), (913, 'Ghaziabad', '28.66 N', '77.41 E', 'Uttar Pradesh'), (914, 'Ghazipur', '25.59 N', '83.59 E', 'Uttar Pradesh'), (915, 'Gola Gokarannath', '28.08 N', '80.47 E', 'Uttar Pradesh'), (916, 'Gonda', '27.14 N', '81.95 E', 'Uttar Pradesh'), (917, 'Gorakhpur', '26.76 N', '83.36 E', 'Uttar Pradesh'), (918, 'Hapur', '28.73 N', '77.77 E', 'Uttar Pradesh'), (919, 'Hardoi', '27.42 N', '80.12 E', 'Uttar Pradesh'), (920, 'Hasanpur', '28.72 N', '78.28 E', 'Uttar Pradesh'), (921, 'Hathras', '27.60 N', '78.04 E', 'Uttar Pradesh'), (922, 'Jahangirabad', '28.42 N', '78.10 E', 'Uttar Pradesh'), (923, 'Jalaun', '26.15 N', '79.35 E', 'Uttar Pradesh'), (924, 'Jaunpur', '25.76 N', '82.69 E', 'Uttar Pradesh'), (925, 'Jhansi', '25.45 N', '78.56 E', 'Uttar Pradesh'), (926, 'Kadi', '23.31 N', '72.33 E', 'Uttar Pradesh'), (927, 'Kairana', '29.40 N', '77.20 E', 'Uttar Pradesh'), (928, 'Kannauj', '27.06 N', '79.91 E', 'Uttar Pradesh'), (929, 'Kanpur', '26.47 N', '80.33 E', 'Uttar Pradesh'), (930, 'Kanpur Cantonment', '26.50 N', '80.28 E', 'Uttar Pradesh'), (931, 'Kasganj', '27.81 N', '78.63 E', 'Uttar Pradesh'), (932, 'Khatauli', '29.28 N', '77.72 E', 'Uttar Pradesh'), (933, 'Khora', '', '', 'Uttar Pradesh'), (934, 'Khurja', '28.26 N', '77.85 E', 'Uttar Pradesh'), (935, 'Kiratpur', '29.52 N', '78.20 E', 'Uttar Pradesh'), (936, 'Kosi Kalan', '27.80 N', '77.44 E', 'Uttar Pradesh'), (937, 'Laharpur', '27.72 N', '80.90 E', 'Uttar Pradesh'), (938, 'Lakhimpur', '27.95 N', '80.78 E', 'Uttar Pradesh'), (939, 'Lakhnau', '26.85 N', '80.92 E', 'Uttar Pradesh'), (940, 'Lakhnau Cantonment', '26.81 N', '80.97 E', 'Uttar Pradesh'), (941, 'Lalitpur', '24.70 N', '78.41 E', 'Uttar Pradesh'), (942, 'Loni', '28.75 N', '77.28 E', 'Uttar Pradesh'), (943, 'Mahoba', '25.30 N', '79.87 E', 'Uttar Pradesh'), (944, 'Mainpuri', '27.24 N', '79.02 E', 'Uttar Pradesh'), (945, 'Mathura', '27.50 N', '77.68 E', 'Uttar Pradesh'), (946, 'Mau', '25.96 N', '83.56 E', 'Uttar Pradesh'), (947, 'Mauranipur', '25.24 N', '79.13 E', 'Uttar Pradesh'), (948, 'Mawana', '29.11 N', '77.91 E', 'Uttar Pradesh'), (949, 'Mirat', '28.99 N', '77.70 E', 'Uttar Pradesh'), (950, 'Mirat Cantonment', '29.02 N', '77.67 E', 'Uttar Pradesh'), (951, 'Mirzapur', '25.16 N', '82.56 E', 'Uttar Pradesh'), (952, 'Modinagar', '28.92 N', '77.62 E', 'Uttar Pradesh'), (953, 'Moradabad', '28.84 N', '78.76 E', 'Uttar Pradesh'), (954, 'Mubarakpur', '26.09 N', '83.28 E', 'Uttar Pradesh'), (955, 'Mughal Sarai', '25.30 N', '83.12 E', 'Uttar Pradesh'), (956, 'Muradnagar', '28.78 N', '77.50 E', 'Uttar Pradesh'), (957, 'Muzaffarnagar', '29.48 N', '77.69 E', 'Uttar Pradesh'), (958, 'Nagina', '29.45 N', '78.43 E', 'Uttar Pradesh'), (959, 'Najibabad', '29.62 N', '78.33 E', 'Uttar Pradesh'), (960, 'Nawabganj', '26.94 N', '81.19 E', 'Uttar Pradesh'), (961, 'Noida', '28.58 N', '77.33 E', 'Uttar Pradesh'), (962, 'Obra', '24.42 N', '82.98 E', 'Uttar Pradesh'), (963, 'Orai', '25.99 N', '79.45 E', 'Uttar Pradesh'), (964, 'Pilibhit', '28.64 N', '79.81 E', 'Uttar Pradesh'), (965, 'Pilkhuwa', '28.72 N', '77.65 E', 'Uttar Pradesh'); INSERT INTO `tblcitylist` (`city_id`, `city_name`, `latitude`, `longitude`, `state`) VALUES (966, 'Rae Bareli', '26.23 N', '81.23 E', 'Uttar Pradesh'), (967, 'Ramgarh Nagla Kothi', '', '', 'Uttar Pradesh'), (968, 'Rampur', '28.82 N', '79.02 E', 'Uttar Pradesh'), (969, 'Rath', '25.58 N', '79.57 E', 'Uttar Pradesh'), (970, 'Renukut', '24.20 N', '83.03 E', 'Uttar Pradesh'), (971, 'Saharanpur', '29.97 N', '77.54 E', 'Uttar Pradesh'), (972, 'Sahaswan', '28.08 N', '78.74 E', 'Uttar Pradesh'), (973, 'Sambhal', '28.59 N', '78.56 E', 'Uttar Pradesh'), (974, 'Sandila', '27.08 N', '80.52 E', 'Uttar Pradesh'), (975, 'Shahabad', '27.65 N', '79.95 E', 'Uttar Pradesh'), (976, 'Shahjahanpur', '27.88 N', '79.90 E', 'Uttar Pradesh'), (977, 'Shamli', '29.46 N', '77.31 E', 'Uttar Pradesh'), (978, 'Sherkot', '29.35 N', '78.58 E', 'Uttar Pradesh'), (979, 'Shikohabad', '27.12 N', '78.58 E', 'Uttar Pradesh'), (980, 'Sikandarabad', '28.44 N', '77.69 E', 'Uttar Pradesh'), (981, 'Sitapur', '27.57 N', '80.69 E', 'Uttar Pradesh'), (982, 'Sukhmalpur Nizamabad', '', '', 'Uttar Pradesh'), (983, 'Sultanpur', '26.26 N', '82.06 E', 'Uttar Pradesh'), (984, 'Tanda', '26.55 N', '82.65 E', 'Uttar Pradesh'), (985, 'Tilhar', '27.98 N', '79.73 E', 'Uttar Pradesh'), (986, 'Tundla', '27.20 N', '78.28 E', 'Uttar Pradesh'), (987, 'Ujhani', '28.02 N', '79.02 E', 'Uttar Pradesh'), (988, 'Unnao', '26.55 N', '80.49 E', 'Uttar Pradesh'), (989, 'Varanasi', '25.32 N', '83.01 E', 'Uttar Pradesh'), (990, 'Vrindavan', '27.58 N', '77.70 E', 'Uttar Pradesh'), (991, 'Dehra Dun', '30.34 N', '78.05 E', 'Uttaranchal'), (992, 'Dehra Dun Cantonment', '30.34 N', '77.97 E', 'Uttaranchal'), (993, 'Gola Range', '', '', 'Uttaranchal'), (994, 'Haldwani', '29.23 N', '79.52 E', 'Uttaranchal'), (995, 'Haridwar', '29.98 N', '78.16 E', 'Uttaranchal'), (996, 'Kashipur', '29.22 N', '78.96 E', 'Uttaranchal'), (997, 'Pithoragarh', '29.58 N', '80.22 E', 'Uttaranchal'), (998, 'Rishikesh', '30.12 N', '78.29 E', 'Uttaranchal'), (999, 'Rudrapur', '', '', 'Uttaranchal'), (1000, 'Rurki', '29.87 N', '77.89 E', 'Uttaranchal'); I hope it was useful to you. :)\n","tags":["database","mysql"],"title":"MySQL Database of 1000 Indian City Names","type":"posts"},{"authors":null,"categories":null,"content":"Want Linux Discs? All you need is an internet connection to make the request and/or a postal address. I’m assuming you have the both. :)\nUbuntu****Request CD: https://shipit.ubuntu.com/ (Ubuntu has stopped the Shipit service. You need to download it now.)Download http://www.ubuntu.com/getubuntu/download\nKubuntu****Request CD: https://shipit.kubuntu.com/ (Same as Ubuntu. No CD, just Download.)Download http://www.kubuntu.org/getkubuntu\nFedora****Request CD: Its a bit tricky. First go here - https://fedoraproject.org/freemedia/FreeMedia-form.html, The form is opened at the beginning of each month. If it says that the form is closed for this month, then find your nearest Fedora ambassador from here and mail them. They will surely attend you as soon as possible. Download http://fedoraproject.org/get-fedora\nRequest CD: https://oscd.sun.com/Download http://www.opensolaris.com/get/index.jsp\nMost of the distros are not available in postal delivery as it needs much maintenance.. But you can download them always..\nMany More Downloadables..\nArch Linux: http://www.archlinux.org/download/ CentOS: http://www.centos.org/modules/tinycontent/index.php?id=15 Debian: http://www.debian.org/distrib/ Linux Mint: http://www.linuxmint.com/download.html Mandriva: http://www2.mandriva.com/downloads/ OpenSUSE: http://software.opensuse.org/ Slackware: http://www.slackware.com/getslack/ Gentoo Linux: http://www.gentoo.org/main/en/where.xml This is it for now. Keep checking my blog for more. ^_^\n","date":1285851600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1285851600,"objectID":"8f927764c6bef7ba11e3c3e342f164f3","permalink":"https://bibhasdn.com/posts/request-or-download-major-linux-distro-cds-absolutely-free/","publishdate":"2010-09-30T13:00:00Z","relpermalink":"/posts/request-or-download-major-linux-distro-cds-absolutely-free/","section":"posts","summary":"Want Linux Discs? All you need is an internet connection to make the request and/or a postal address. I’m assuming you have the both. :)\nUbuntu****Request CD: https://shipit.ubuntu.com/ (Ubuntu has stopped the Shipit service. You need to download it now.)Download http://www.ubuntu.com/getubuntu/download\nKubuntu****Request CD: https://shipit.kubuntu.com/ (Same as Ubuntu. No CD, just Download.)Download http://www.kubuntu.org/getkubuntu\nFedora****Request CD: Its a bit tricky. First go here - https://fedoraproject.org/freemedia/FreeMedia-form.html, The form is opened at the beginning of each month. If it says that the form is closed for this month, then find your nearest Fedora ambassador from here and mail them. They will surely attend you as soon as possible. Download http://fedoraproject.org/get-fedora\n","tags":["distro","fedora","kubuntu","latest","linux","ubuntu"],"title":"Request or download major Linux distro CDs, absolutely Free.","type":"posts"},{"authors":null,"categories":[],"content":" Disclaimer This post is not for Expert users. Only the novice guys who are interested in these stuff, might have a look.\nWhile working on an AJAX implemented script, we sometimes need to return a lot of data from the server side script. If you’ve worked with AJAX, you’ll know that the script returns the value as httpObject.responseText. And the value of responseText is what you echo from your script. Now that makes our scope limited.\nAssuming that We have a javascript file testAjaxJs.js and testAjaxPhp.php ..\nIf you try to make a lot of echo inside the php script, all of them are gonna get appended one behind another and appear like, for an example, this - BibhasChandraDebnath.\nNow, you may have an idea of echoing a special character like ’-’ or ‘_’ after each echo so that you can then split the whole text inside the JS file using the split function and form an array.\nThat might be an idea, but there is a better way. Why not just use JSON to return data as array? Well, PHP can pretty much deal with JSON and it is a native thing to Javascript. So, it becomes easier. :)\nDo this, initialize an array inside the php script, and whenever you have a data ready to be returned, insert it into the array.\nSo at the end of the script, you’ll have an array like this -\nArray ( [first_name] =\u0026gt; Bibhas [middle_name] =\u0026gt; Chandra [last_name] =\u0026gt; Debnath ) Now,we’re gonna encode this data as JSON object. For that,\n$json_name=json_encode($array_name); Now your array will look like -\n{\u0026#34;first_name\u0026#34;:\u0026#34;Bibhas\u0026#34;,\u0026#34;middle_name\u0026#34;:\u0026#34;Chandra\u0026#34;,\u0026#34;last_name\u0026#34;:\u0026#34;Debnath\u0026#34;} As this is a string to PHP, you can easily echo it. Now lets go to the Javascript part to read this JSON string we just sent to it.\nInitialize a variable to store the returned string in it -\nvar jsonText = httpObject.responseText Now we need to transform this JSONText to a JSON Object. For that, we can use the eval() function. Like-\nvar jsonObject= eval(\u0026#39;(\u0026#39;+jsonText+\u0026#39;)\u0026#39;); or\neval(\u0026#39;jsonObject=\u0026#39;+jsonText); both works the same in this case. So now that we have a JSON Object, lets get those data.\nvar firstName=jsonObject.first_name; var middleName=jsonObject.middle_name; var lastName=jsonObject.last_name; And that’s it, you’ve got your data back. :)\n","date":1285333200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1285333200,"objectID":"4530afccab67aa04eeead13cd4091352","permalink":"https://bibhasdn.com/posts/return-multiple-values-from-ajax-script-with-ease/","publishdate":"2010-09-24T13:00:00Z","relpermalink":"/posts/return-multiple-values-from-ajax-script-with-ease/","section":"posts","summary":" Disclaimer This post is not for Expert users. Only the novice guys who are interested in these stuff, might have a look.\nWhile working on an AJAX implemented script, we sometimes need to return a lot of data from the server side script. If you’ve worked with AJAX, you’ll know that the script returns the value as httpObject.responseText. And the value of responseText is what you echo from your script. Now that makes our scope limited.\n","tags":[],"title":"Return Multiple Values from AJAX script with ease","type":"posts"},{"authors":null,"categories":[],"content":"I dunno about you guys, but I was getting weary of all the url shorteners that has grown like weeds around us.. Hence thought of using something that I could customize and use as I like. Hence did a Google search and found Yourls.\nThe case is simple, this service gives your site a capability to shorten urls. All you need is a Domain. Let it be a Top-Level Domain or a free one.. Now this is what I call usability. :)\nAs you already know, I maintain a TLD. So I thought of a URL shortener like bibhas.in/l/ .. So, I downloaded Yourls. According to its guide, installed it and just ran it. And Voila! It works flawlessly. :)\nNow, coming to the main points, what are the advantages of Yourls over Bit.ly Pro(another similar service)?\nYours is totally customizable. Its open source. So you can modify it anyway you want. :) All the link data are saved in your own database. Whereas Bit.ly stores then in its own database. Yourls has a cool API that\u0026#39;s fairly simple to use. Yourls provides two bookmarklets to share any link you want to share on the go. :) Yourls gives you a local API. Means all the functions resides on your server. You\u0026#39;re given an unique signature which you can use instead of username and password while making an API request. And you call goes like this -\nhttp://bibhas.in/l/yourls-api.php?signature=f271546ece\u0026amp;action=shorturl\u0026amp;url=http://bibhas.in\u0026amp;format=xml as simple as that. :)\nMore details on the API can be found here - http://yourls.org/#API\nHere is a screenshot of the default Yourls Link Dashboard -\n// Image no longer available Now, If you’re interested in using it, Download Yourls from here - http://yourls.org/download\n","date":1282827600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1282827600,"objectID":"b520e9a48c5b309c724e91802e0f9b65","permalink":"https://bibhasdn.com/posts/url-shortening-at-your-finger-tip/","publishdate":"2010-08-26T13:00:00Z","relpermalink":"/posts/url-shortening-at-your-finger-tip/","section":"posts","summary":"I dunno about you guys, but I was getting weary of all the url shorteners that has grown like weeds around us.. Hence thought of using something that I could customize and use as I like. Hence did a Google search and found Yourls.\nThe case is simple, this service gives your site a capability to shorten urls. All you need is a Domain. Let it be a Top-Level Domain or a free one.. Now this is what I call usability. :)\n","tags":[],"title":"URL Shortening at your finger tip. :)","type":"posts"},{"authors":null,"categories":[],"content":"Well, this was an idea from Kuntal Gupta. He asked me to make a redirecting script, so that if you pass any url to that page, it’ll redirect to that link surely, but will also give your site a hit.\nThen i just thought, why not use JS to turn all the hyperlinks to such redirecting links. That way, whenever someone clicks a link on your site, you get an extra hit, irrespective of if the link is outgoing or in your site. :D\nThis is how it works -\nMake a php file, name it redirect.php and save it in your root so that the location is, say, http://\u0026lt;your_url\u0026gt;/redirect.php and then edit the file and paste this code -\n\u0026lt;?php $url=$_REQUEST[\u0026#39;url\u0026#39;]; header(\u0026#34;location: $url\u0026#34;); ?\u0026gt; Save it.\nNow add this Javascript snippet in your site’s header, inside the \u0026lt;head\u0026gt;\u0026lt;/head\u0026gt; block -\n\u0026lt;script type=\u0026#34;text/javascript\u0026#34; language=\u0026#34;javascript\u0026#34;\u0026gt; function reDirectMe() { var link = document.getElementsByTagName(\u0026#34;a\u0026#34;); for (var i=0;i\u0026lt;link.length;i++) { link[i].href = \u0026#34;http://\u0026lt;your_url\u0026gt;/redirect.php?url=\u0026#34;+link[i].href; } } window.onload=reDirectMe; \u0026lt;/script\u0026gt; Now obviously you’d like to change the \u0026lt;your_url\u0026gt; part to your domain.\nAnd thats it. Now reload your site, and you’ll see that all your hyperlinks have changed and now passes through the redirect.php file and gives you an extra hit every time you click a link.\nEnjoy. :D\n","date":1282395600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1282395600,"objectID":"cbb770c5c30240df516690a3f9b1e602","permalink":"https://bibhasdn.com/posts/get-two-pagehits-for-a-single-link/","publishdate":"2010-08-21T13:00:00Z","relpermalink":"/posts/get-two-pagehits-for-a-single-link/","section":"posts","summary":"Well, this was an idea from Kuntal Gupta. He asked me to make a redirecting script, so that if you pass any url to that page, it’ll redirect to that link surely, but will also give your site a hit.\nThen i just thought, why not use JS to turn all the hyperlinks to such redirecting links. That way, whenever someone clicks a link on your site, you get an extra hit, irrespective of if the link is outgoing or in your site. :D\n","tags":[],"title":"Get two Page hits for a single link. ;)","type":"posts"},{"authors":null,"categories":null,"content":"I do mostly backend dev, plus Ops. Tools no bar as long as it solves the problem.\nNothing brings me more joy than visiting a new place or doing something new or breaking a fear. I also like to help people find new places and things to explore. If you are in a community that values that, sign me up.\nOutside work, I’d be more interested if someone talked about their passions, hobbies, interests, dreams instead of the latest tech.\nI’m also a nature loving person. Hit me up if you want to spend some Sunday morning amidst nature in Bangalore.\nYou can find me on GitHub, Twitter, and LinkedIn.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":-62135596800,"objectID":"8576ec274c98b3831668a172fa632d80","permalink":"https://bibhasdn.com/about/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/about/","section":"","summary":"I do mostly backend dev, plus Ops. Tools no bar as long as it solves the problem.\nNothing brings me more joy than visiting a new place or doing something new or breaking a fear. I also like to help people find new places and things to explore. If you are in a community that values that, sign me up.\nOutside work, I’d be more interested if someone talked about their passions, hobbies, interests, dreams instead of the latest tech.\n","tags":null,"title":"About me","type":"about"},{"authors":null,"categories":null,"content":"","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":-62135596800,"objectID":"00e668dc78d67452a579e9fd5d75795e","permalink":"https://bibhasdn.com/blr-heritage-map/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/blr-heritage-map/","section":"","summary":"","tags":null,"title":"Bengaluru Heritage Map (moved)","type":"page"},{"authors":null,"categories":null,"content":"Bibhas Chandra Debnath Bangalore, India Backend developer with 15+ years of experience in building web applications and APIs, and working with databases.\nExperience Red Hat, Bangalore (MAY 2024 - PRESENT) Senior Software Engineer\nThe Linux and Open Source company.\nTech stack - Golang, Snowflake DB, Fivetran, SQL, Terraform, Gitops, Openshift/Kubernetes Operators, Podman/Docker\nMajor Projects -\nBuild a data platform on top of Snowflake DB from scratch, following Gitops principals Built and maintained a Golang library that syncs the company user accounts across platforms including Snowflake and Fivetran Used CRDs in Openshift operator to reconcile the data product configurations with Snowflake DB Helped build the process to track cost per data product based on role and tag usage on snowflake Build an evidence collection framework for compliance and deployed it on Openshift Control logics and schedules were stored as Python objects in a gitlab repo Added support for Snowflake, Gitlab, Rover, Astro as sources, and Splunk as destination for logs Build a AI MR review Bot for Gitlab to reduce toil of engineers Setup a CRM workflow using Slack Lists to handle customer requests more efficiently and reduce toil on support engineers Shifted the CI pipelines to self-hosted gitlab runners on Openshift from org managed runners. It currently handles 2000+ CI jobs per hour during peak hours. Natural User Interface Technologies (NUITEQ), Remote (JULY 2021 - APRIL 2024) Senior Software Engineer\nProduct company based out of Sweden that pioneered multi touch user interface in collaborative softwares and hardware, to be used in schools for teaching, and in private organizations for facilitating ideation and implementation.\nTech stack - TypeScript, NodeJS, CouchDB, PostgreSQL, Docker\nMajor Projects -\nPorting existing vanilla Javascript code to TypeScript, introducing Nest JS, and PrismaJS ORM for better interaction with the database Migrating existing data from CouchDB into an RDBMS (PostgreSQL) for better structure and performance. This involved - Redefining data model for the existing NoSQL database via entity-relationship diagrams Making sure all entities have valid relationship in the database Write migration scripts for existing data Build a new product entirely from scratch. I was primarily responsible for designing data models, and building the API for the user authentication system, role management system, and organization management system HasGeek, Bangalore (APRIL 2017 - JUNE 2021) Software Engineer\nMedia company that helps individuals grow their reputation and credibility, via peer‐reviewed events and conferences. I was part of the tech team that developed the software that ran the events.\nTech stack - PostgreSQL, Flask, SQLAlchemy, AWS\nRepositories ‐\nhttps://github.com/hasgeek/funnel/commits?author=iambibhas https://github.com/hasgeek/imgee/commits?author=iambibhas https://github.com/hasgeek/ (more here) Responsibilities included ‐\nDeveloping and maintaining software to run the HasGeek events, which included adding features to run online events during COVID‐19. Backend stack was Flask+PostgreSQL. Overseeing application deployments, at first using fabric scripts, and then later on using github actions Some major projects ‐\nDesigning and implementing a spam reporting and management system for comment moderation. Involved an automatic moderation system that considered repeated spam reports to take actions. Porting Python 2.7 codebases to Python 3 Adding SSL support to all domains using LetsEncrypt, including multi tenant domains using wildcard certificates Adding i18n support and help add Hindi support to the website Setup automated daily, weekly, and monthly backup of Postgres databases to S3 Akshara Foundation, Bangalore (AUGUST 2013 - APRIL 2017) Software Engineer\nNGO in Karnataka that gathers and processes education related data and helps children get better education. I was part of the tech team that gathered all the data from sources like different xls/xlsx files, MySQL/Oracle DB dumps, CSVfiles, 3rd party APIs etc, and processed them to build an open API on top of it to help other NGOs and Govt bodies to make better decisions to help the schools.\nTech stack - Python, Django, PostgreSQL, Vagrant, PostGIS, Jenkins\nRepositories ‐\nhttps://github.com/klpdotorg/dubdubdub/commits?author=iambibhas https://github.com/klpdotorg/dise_dashboard/commits?author=iambibhas https://github.com/klpdotorg/mobile/commits?author=iambibhas Responsibilities included ‐\nGathered, cleaned and imported data from various sources using tools like pandas and OpenRefine, and then stored them in PostgreSQL and generated insight out of them. Developed a data visualization tool for District Information System for Education (https://dise.klp.org.in/, no longer maintained.) Building maps of schools created with PostGIS and OpenStreetMap data. Managed servers and set up Postgres backups to S3. Contributed in the development of an Android app for …","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":-62135596800,"objectID":"3960dd3bdc6f629fb800d1d2aaa7224f","permalink":"https://bibhasdn.com/resume/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/resume/","section":"","summary":"Bibhas Chandra Debnath Bangalore, India Backend developer with 15+ years of experience in building web applications and APIs, and working with databases.\nExperience Red Hat, Bangalore (MAY 2024 - PRESENT) Senior Software Engineer\nThe Linux and Open Source company.\nTech stack - Golang, Snowflake DB, Fivetran, SQL, Terraform, Gitops, Openshift/Kubernetes Operators, Podman/Docker\nMajor Projects -\nBuild a data platform on top of Snowflake DB from scratch, following Gitops principals Built and maintained a Golang library that syncs the company user accounts across platforms including Snowflake and Fivetran Used CRDs in Openshift operator to reconcile the data product configurations with Snowflake DB Helped build the process to track cost per data product based on role and tag usage on snowflake Build an evidence collection framework for compliance and deployed it on Openshift Control logics and schedules were stored as Python objects in a gitlab repo Added support for Snowflake, Gitlab, Rover, Astro as sources, and Splunk as destination for logs Build a AI MR review Bot for Gitlab to reduce toil of engineers Setup a CRM workflow using Slack Lists to handle customer requests more efficiently and reduce toil on support engineers Shifted the CI pipelines to self-hosted gitlab runners on Openshift from org managed runners. It currently handles 2000+ CI jobs per hour during peak hours. Natural User Interface Technologies (NUITEQ), Remote (JULY 2021 - APRIL 2024) Senior Software Engineer\n","tags":null,"title":"Resume","type":"resume"},{"authors":null,"categories":null,"content":"Search is in the site header.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":-62135596800,"objectID":"4953bf99d7018c161b1b361cb25f1331","permalink":"https://bibhasdn.com/search/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/search/","section":"","summary":"Search is in the site header.\n","tags":null,"title":"Search","type":"page"}]