A body in motion tends to stay in motion.**TL;DR** - If you feel burnout, try to move forward. - You have many dimensions to your life where you can make progress. - Any progress will make you feel better and reduce your burnout. - It will work best, if you progress in the area of your life that is stuck the most, or that is most important to you at the moment. --- As many other developer I'm prone to the veeling of burnout. I run a few [projects](/projects), I work at [Readwise](https://readwise.io/), I have a family and a small toddler. I have enough things that happen in my life. Right now I'm going through a period where everything stopped moving at the pace I'm used to: - My wife got a little sick, so I spent some time taking care of her, of our son. - I was working on a feature at Readwise that was a little over my head performance wise. SO it has been going through the process of review and rewrites for a couple of weeks now. - I'm working on updating [TuxSEO](https://tuxseo.com/) generation reliability, which is much harder then I relized. - My inlaws are visiting us, so I have to find new places to work from. This has been going on work 3 weeks now. This morning I felt burnout the most. I did not want to do anything (work). I pushed through and got started... And suddenly, things started to flow again. Not becuase all those things got fixed, they didn't. Just because I shipped one small update at work, related to that project I mentioned above. Then another, then another. Suddenly I don't feel so burntout anymore. Just because things started moving along. So, my suggestion to you is this. If you feel burnout, try to move forward. You have many dimensions to your life where you can make progress. Any progress will make you feel better and reduce your burnout. It will work best, if you progress in the area of your life that is stuck the most, or that is most important to you at the moment. "most important" can be work, no shame in that. On a grander scale of things, family is the most important, of course. But, there is no shame admitting that getting unblocked at work, is more important to you in that second. All the other things will get better to if you approach that part of your life first. --- # Cleanapp and Fast Shipping URL: https://www.rasulkireev.com/cleanapp/ Type: article Date: 2025-10-21 Description: Building and deploying Cleanapp in just a few hours using Django CookieCutter starter and AI-assisted coding. How the right tools and approach can turn an idea into a live product incredibly fast. Tags: Django, SaaS, Indie-Hacking, Productivity, Development Content: Yesterday, I was reading [my feed](https://readwise.io/i/rasul) and ran into [Justin Duke](https://jmduke.com/)'s [post](https://weeknotes.buttondown.email/archive/mise-incidents-anki-dogfooding-the-api/) from his [Weeknotes newsletter](https://weeknotes.buttondown.email/). In it, he had an interesting paragraph: > I want a service that every morning sends me a random entry from my sitemap so that I can go through and review it for outdated copy or screenshots. This was supposed to help with pages containing old content, old screenshots, or anything outdated. I thought it was an interesting idea, and more than that, it was a simple idea to implement. So I got to work. This morning, I quickly got my [Django SaaS Starter](https://github.com/rasulkireev/django-saas-starter) ready to generate the project. After a couple of hours of coding, it was live on [cleanapp.dev](https://cleanapp.dev/), ready for people to check out. I was very surprised by how quickly I was able to get it running. Yes, the app is super simple, so the coding part did not take too long. But I also bought the domain, hosted it, set up CI/CD to push to my self-hosted server using CapRover, setup Mailgun and Emai Alias. Everything from start to finish... Logs, Sentry, db, you name it, everything. I'm very thankful to my past self for creating and updating the Django SaaS Starter. Now on to AI. It was also a lot of fun to use it for this project. Mostly, I've been working on legacy projects where there's a lot of existing code, and AI isn't very good with that. But here, with new code, UI (the part I hate most), logic, models were done under an hour. Granted, I didn't do the "standard vibe coding" approach where I prompt AI to just build the app. I worked bit by bit, knowing what I needed to update. With this approach, it's been a lot of (reliable) fun. The sheer amount of good (by my standards) code that I was able to ship today is mind-boggling. Thank God for AI, it just makes stuff so quick and so enjoyable. I really don't understand people who say that using AI to ship code isn't fun. I guess I'm not a purist who writes code for code's sake. I write it for the end result, and getting this end result has been very, very enjoyable. Side note: The reason I was able to do all this is because starting today, my son began going to kindergarten. Usually I spend my mornings with him, but today I got three to four hours to myself while he was there. I was able to accomplish all of this in that time. Given that he's probably going to continue going, I can't wait to make more progress on my other apps, mainly [TuxCEO](https://tuxseo.com), which I'm really hoping to grow to at least some MRR. Right now, all of my projects are at zero MRR. So stay tuned. I'll try to make all of this public, and I hope to share more updates soon. --- # There is Always Another Way URL: https://www.rasulkireev.com/there-is-always-another-way/ Type: article Date: 2025-09-03 Description: Rules and limitations can be overcome through creativity and finding alternative categories or approaches. Tags: Problem-Solving, Creativity, Marketing, Life-Lessons Content: I was reading "The 22 Immutable Laws of Marketing" this week and this sentence stood out to me. > If you didn’t get into the prospect’s mind first, don’t give up hope. > Find a new category you can be first in. It’s not as difficult as you might think. It was in the "[The Law of the Category](https://ericsink.com/laws/Law_02.html)" stating that if you want your business to succeed, you need to be the best or the first in a category. If you can't be the first, you just need to create another category. I'm still going through the book, but it seems that the world "law" is used sparringly here. Yes, these are strict rules, but all of them have an interesting workaround that can be exploited. I'm sure this is the same with life. There are rules and laws that prevent you from doing something or becoming something. But all of these [rules can be "broken"](https://julesh.com/2017/08/16/breaking-the-rules/) if you use your imagination and creativity. The simplest example that comes to mind is that with a Russian citizenship (which I have) [you can't apply for a Dutch visa](https://www.netherlandsworldwide.nl/visa-the-netherlands/schengen-visa/apply-russian-federation), which I needed to travel to Curacao to meet with my team. I could give up, or I could realize that you can enter on a different Schengen visa. Yes, the travelling would take much longer, but at least I achieved the desired goal, despite the rules. This may be a silly example... but I urge you to think about your life and remember times where you succeeded, despite the circumstances, despite the rules. Share them with [me](mailto:me@rasulkireev.com)and I'll add the to this post. To take this point further, some of the most interesting ideas come from restrictions and limitations: - Dr. Seuss wrote the classic children's book 'Green Eggs and Ham' after being challenged to produce a book using no more than fifty different words. - Alfred Hitchcock filmed "Rope" to appear as one continuous shot using only 10-minute film reels - Some of the most famous and popular games in the world (Tetris, Pac-Man) came to be due to severe limitation in processing power available. You get the gist. Maybe you shouldn't just find another way when you run into a problem, maybe you should seek these problems out to find another way! Marcus Aurelius probably said it better than me in his "Meditations": > The impediment to action advances action. What stands in the way becomes the way. --- # Start Small, Stay Small URL: https://www.rasulkireev.com/start-small-stay-small/ Type: book Date: 2025-08-11 Description: A practical, market-first playbook for developers to bootstrap software startups without external funding. Walling stresses niches, marketing over features, and measurable validation (keyword research, AdWords tests). Build a high-converting sales site, grow an email list, price with tiers, and use VAs/outsourcing and documented processes to scale. Set clear goals (e.g., first $500 MRR), iterate quickly, and focus on verticals where you can be the best. Author: Rob Walling Tags: Bootstrapping, Micropreneur, Niche Marketing, Vertical SaaS, Marketing, Email Marketing, Sales Websites, Conversion, Pricing, SEO, AdWords, Product-Market Fit, Launch Strategy, Outsourcing, Virtual Assistants, Time Management, Process, Entrepreneurship, SaaS, Lean Startup Content: ## My Thoughts This book is filled with actionable, direct suggestions on how to ship a product that will generate revenue. It helps you avoid non-income-bearing ideas that waste time by forcing you to think about earnings as early as possible. While I haven't successfully applied these ideas yet, it feels as though following this advice strictly would inevitably lead to earning money. ## Summary Start Small, Stay Small is a practical, execution-first playbook for developers who want to launch and grow profitable software businesses without external funding. Rob Walling argues that marketing beats code in determining success: start with a clearly defined, underserved niche, validate demand before building, and focus on building an audience and a sales system that converts. The book emphasizes a market-first approach, lightweight testing via keyword tools and AdWords, and building a minimum viable product while rigorously managing time, scope, and priorities. Walling lays out a complete operating system for a micro SaaS: set written goals (e.g., first $500/month profit), value your time, outsource early, document processes, and channel energy into Top Shelf marketing (email list, content, SEO). He details how to craft a high-converting sales website (capture emails first, clear hook, single CTA, simple pricing tiers, guarantees), nurture leads with autoresponders, earn focused traffic, and build compounding assets. Finally, he shows how to iterate, measure, and decide whether to double down or start over. ## Learnings - Adopt the entrepreneur mindset: write goals, make public commitments, create accountability; aim for the first $500/month profit milestone. - Market first, product second: failure most often comes from building something no one wants. - Choose a tight niche (preferably “warm”) to reduce competition, increase relevance, and simplify marketing and feature scope. - Validate demand before coding: use keyword tools, competition scores, and short AdWords tests to measure real search volume and interest. - Product Success Triangle: product, market, execution—early effort should prioritize market and execution. - Ship a 200–400 hour MVP; trim features aggressively to reach launch faster and learn sooner. - Value your time; outsource/VA repetitive and low-value tasks; delay automation until the process proves its worth. - Document repeatable processes to enable delegation, reduce mistakes, and increase the startup’s eventual sellability. - Focus beats busyness: avoid “fake work” (excess reading/research); take action notes; single-task; either work or truly rest. - Build compounding marketing assets: an email list, a blog/podcast/video presence, and organic search visibility. - Use PPC as a learning tool (keyword discovery and validation), not a permanent growth crutch. - Optimize for quality traffic: small, highly targeted placements convert better than broad “big press” spikes. - Sales website rule: don’t try to sell on first visit; primary goal is email capture via trust, relevance, and a clear reward (lead magnet, contest, course). - Core site principles: one primary CTA per page; everything within two clicks; strong hook; buttons that look clickable; visual over text where possible. - Include core pages: Home, Tour, Testimonials, Pricing/Purchase, Contact; keep the home page simple with a single next step. - Pricing: anchor to value and market norms; prefer three tiers; lean higher; end prices in 7/8/9; consider support/maintenance fees for one-time licenses. - Offer a free trial or a strong money-back guarantee to reduce friction and increase conversions. - Email strategy: build an autoresponder series; maintain relevance; optimize send timing and subject lines; mix education with periodic offers. - SEO and links: prioritize high-quality, relevant links; vary anchor text; build consistently over time; leverage directories, niche sites, competitor backlinks, alerts, articles, testimonials, and ethical link opportunities. - Iterate and test relentlessly (copy, pricing, funnels); accept uncertainty, fail fast, measure, and improve. - Decide to grow or reset based on data; track key metrics from day one to improve operations and preserve optionality for a sale. --- # Growth Levers and How to Find Them URL: https://www.rasulkireev.com/growth-levers/ Type: book Date: 2025-08-10 Description: A practical playbook for finding outsized growth by shifting from optimization to discovery—map the customer journey (Struggle → Search → Selection), build a growth model (North Star, key drivers, rate‑limiting step), and run hypothesis‑driven sprints to do fewer, bigger things that truly move the needle. Author: Matt Lerner Tags: Growth, Startups, Product Management, Marketing, Experimentation, Customer Development, Jobs To Be Done, Data-Driven, Business Strategy, Lean Startup Content: ## My Thoughts I definitely liked the book. I read it with my personal projects in mind and how to grow them, but it wasn't super applicable for me because my projects are in very early stages—no revenue, no customers, no employees. Although a few pieces of advice were definitely useful to consider, they weren't directly applicable to my current situation. At the same time, since I work at Readwise, and this book is definitely more suited for a company like this, it was useful for thinking about growth levers for Readwise specifically and the frameworks that could be beneficial. This is especially relevant because I work as a growth analyst there, so thinking about applying some of those concepts would be very valuable. I have yet to implement any of these ideas since I was using Readwise to read the book and made numerous highlights that I can revisit and analyze—which should be very useful for the company. I think in general, if any of my personal projects do become successful in the future, this book would prove quite valuable. ## Summary Growth Levers and How to Find Them argues that early-stage growth comes from a tiny set of outsized levers, not from doing lots of small things a bit better. Startups win by becoming instruments of discovery—learning faster who the right customers are, what value they want, where to reach them, and which few tactics drive step-change outcomes. Effort and complexity don’t pay; outcomes and insight do. Lerner’s system has four parts: understand the customer journey (Struggle → Search → Selection), map a growth model (North Star Metric, key drivers, levers, and the rate-limiting step), run rapid growth sprints (hypothesis-driven experiments that favor big learning), and shift culture from optimization to discovery. Do fewer, bigger things; align the company on a simple dashboard; and expect a non-linear path of “nothing…nothing…bang!” ## Learnings - Outcomes over effort; do fewer, bigger things that move the needle. - Early stage: discovery for step-changes beats optimization for marginal gains. - Map the journey (Struggle → Search → Selection) and match tactics to stage. - Use "Jobs to be Done" interviews with recent buyers/substitutes to uncover triggers and anxieties. - Anchor on a simple, absolute North Star Metric that rises with delivered customer value and revenue. - Define key drivers as outcome metrics across the funnel; avoid counting activities. - Turn drivers into levers with outcome targets; track via a simple, shared dashboard. - Find the rate-limiting step—if doubling it would double the business, focus there. - Prioritize by potential impact, learning value, effort, strengths, and feedback loops. - Run growth sprints: score (Key driver, Impact, Effort), test quickly, learn, repeat. - Write falsifiable hypotheses (risky assumption → experiment → predicted metric change → business decision). - Minimize complexity; progress is non-linear (“nothing…bang”)—if you’re learning, you’re on track. --- # February 2025 URL: https://www.rasulkireev.com/february-2025/ Type: article Date: 2025-03-07 Description: Bringing back monthly reviews. February 2025 was pretty good. Tags: 2025, February, Review Content: Looking back at February, I'm struck by how much I've settled into a sustainable rhythm between my work at Readwise, my side projects, and family life is what I wish I could say. It's been hard. I'll share more below, but for Readwise work it felt a lot of the time that I just have a shitty streak where I can't get many things done. A lot of new things are flying at me and spending considerable amount of time on each, without succeeding in the end is bringing me down a bit. Personal work is also lacking a bit. Though there are things to celebrate, in general direction it feel like I am a little lost and am not sure how to proceed. Family wise, it often feel like I could be dedicating more time to my wife and my son. So each part feels like it is not getting enough attention and success from me. But then, at the same time, all of these are more or less good, nothing crazy bad is going on. Weird thoughts, weird state. This month was about finding balance while still making progress on multiple fronts. ## Major Themes ### Balancing Pragmatism with Exploration This month, I juggled practical work tasks with creative exploration. At Readwise, I found myself diving deep into debugging issues while simultaneously exploring new AI tools in my side projects. I'm learning that both sides of this coin are important - the meticulous problem-solving builds career skills, while the creative exploration feeds my passion. ### Documentation and Reflection I've developed a strong habit of daily logs. Thanks to AI I have a strong feeling that those logs would never be lost. I can just feed them all into an LLM model and it will help me solve a problem I'm having with the context of my own thoughts. Need to find a specific event/thought? Boom, done. Need help summarizing your week/month? Boom, done. Just this simple thought of it being useful and not lost has been a game changer to keeping this habit stick. I wonder if there is a way to integrate this into other parts of life... ### Embracing AI as a Multiplier This month reinforced my belief in AI as a force multiplier. From updating Built with Django to enhancing [SEO Blog Bot](https://seoblogbot.com) with PydanticAI, I'm seeing firsthand how these tools can accelerate development. As I reflected on February 3rd: "I will be so stupid if I don't take action and leverage the usefulness of AI now. It's not about the hype. What matters is the speed revolution." ### Family Milestones Amidst all the work, there were beautiful family moments. Theo's potty training success was a highlight, and I cherished our morning routines together. These moments remind me why finding work-life balance matters so much. A huge personal win on this front is the discovery of "Hunt, Gather, Parent" book. Game. Changer. Thanks to [Johannes](https://github.com/jhlabs) for recommending it. It further improved the relationship I have with my son. I'm now recommending it to aaaaaal parents. ## Readwise Work Highlights ### Debugging and System Improvements A significant portion of my work involved investigating and fixing user-reported issues. While not always glamorous, I recognized the importance of this skill: "Having the ability to quickly debug and figure out what's going on and fix it is very important, because most of the work of a programmer is actually maintaining code." Yet at the same time it is a hard thing to do, not only from a skill point of view, but from a psychologial (especially if you were not the one to write the code in the first place). The feeling of spinning your own wheel and going into a never ending rabbit whole of code is hard. If you succeed the light at the end of the tunnel feels great. If you don't, it just brings moral down. I was a little in the latter camp this month. Key accomplishments included: - Have been setting up and fixing all [Wiseup](https://wiseup.readwise.io/) issues. - Improved Twitter integration logs and diagnostics. Didn't really ship any fixes, but just got a much better inderstaing of all the moving parts. - Fixed some smaller bugs, like Enhanced Send to Kindle functionality and Export Integration bugs. - Created better NewRelic dashboards for monitoring, as well as improving our logging in general. ## Personal Life Highlights ### Side Projects #### Built with Django - Added pagination and search functionality - Integrated PydanticAI and Gemini to analyze web pages - Fixed migration issues and storage problems - Added more featured projects to the directory #### SEO Blog Bot This became my most active side project, with numerous improvements: - Added a cheaper pricing tier to attract more customers - Implemented PydanticAI for better content generation - Added like/dislike functionality for feedback - Refactored code to make future updates easier - Improved error handling for scanned projects ### Content Creation - Published blog posts including "Throw Away Dead Code" and "Getting Real" - Created my first video demo for SEO Blog Bot and shared it on social media - Started using AI to summarize books like "How to Get Rich" by Felix Dennis --- # Hunt, Gather, Parent URL: https://www.rasulkireev.com/hunt-gather-parent/ Type: book Date: 2025-03-07 Description: I am a huge fan of this book. This is **the** book I'm recommending to all parents. I believe that this book can make the whole world a better place just by helping parents figure out how to have fun with their kids and not be all tires and depressed. Author: Michaeleen Doucleff Tags: Parenting, Anthropology, Child Development, Cross-Cultural Studies, Indigenous Cultures, Maya, Inuit, Hadzabe, Non-Western Parenting, Attachment Parenting, Alternative Education, Unschooling, Minimalist Parenting, Positive Discipline, Emotional Intelligence Content: ## My Thoughts A lot of thought and learning below. To set the right tone, I'll start by saying that I am a huge fan of this book. This is **the** book I'm recommending to all parents. I believe that this book can make the whole world a better place just by helping parents figure out how to have fun with their kids and not be all tires and depressed. Some points below might seem a little unstructured, but I'm just brain vomitting things here. I am such a huge fun of this book that I just want to share all the things it changed in my life. I like how the author shared her problems with her kid and how her experiences and learning have helped to deal with tough moments. Actual practical stories that are very relatable. Maybe they would be less relatable for other parents and hence less helpful, but I somehow doubt it. ## How It Affected Me and My Son Every morning when Theo wakes up we start with him doing his own breakfast, which usually means: - moving the chair to the fridge and getting all the butter there is (the more the better), thermos with prepared oatmeal and a bottle of milk - moving the chair to the counter (he is usually lazy to do it by himself and asks me, i oblige) and start preparing the plate, which means, trying to cut and eat as much butter as possible, while I put the oatmeal in his plate. - put the plate with oatmeal and butter into microwave and press all the buttons - once it is hot enough, pour the cold milk and stir. by the time it is time to stir he is usually in his sit and ready to eat, so i do the stirring this ritual takes time, but it is fun, makes the time go faster and wakes me up. and there is not much that can go wrong: - milk spilling?... didn't happen once - butter overeating. oh well, he is not going to die from that. after eating for a bit, he goes to play, usually with his cars. he does try to involve me, but I refuse under the pretense of drinking coffee and reading. sometime it works, sometimes it doesn't. and by "it works" i mean he just plays by himself. it is usually a rare occurence, but after using the tips and tricks from the book it happens more and more (the tip i'm referring to is just ignoring him as i like to put it, though it is descirbed below in a more sophisitcated manner). This is just one example of how I spend time with him. There are many others, but the point is that we don't really do kid activities any more, but try to do all the stuff together. I even let him come to my "home office" while I work, while before I would shut the door. Yes he comes more often and yes he is trying to interrupt or use the computer. But, again, this is slowly improving with consistent approach of saying that you can be nearby and ply by yourself and we can be together in the same room. It definitely feel much nicer, than just locking myself in. Plus, he helps me by keeping me acountable. Can't be setting a bad example of just being on social media. All of this to say it is not easy, but it is incredibly rewarding. Changing the way I coomunicate with my son just changes the whole dynamic. He is no longer a kid, but an adult that just has trouble communicating sometimes and requires a little more attention. I've stopped yelling altogehter. Before I would sometimes raise my voice. Now I just don't do it. Not because it is bad for your kid or anything like, but becuase this book helped me realize it is just useless. It is not helping you, nor your kid. This has had a profound effec too. He was not a very hysterical to begin with, but these screaming matches have become almost non existent. And when they do appear you know they are about something real. ## Book Analysis ### Unity Statement By examining parenting practices in three diverse cultures, Doucleff reveals how Western parenting norms, which emphasize control, isolation, and constant stimulation, often undermine children's innate drive to cooperate, learn independently, and regulate their emotions, and offers an alternative approach based on togetherness, encouragement, autonomy, and minimal interference that fosters children's natural development into confident, capable, and well-adjusted individuals. ### Problems Author is Trying to Solve How can parents in Western cultures raise children who are helpful, cooperative, emotionally intelligent, and confident, while minimizing conflict and stress for both the child and the parent? ### AI Prompt Ideas - Age-Appropriate Chore Ideas Prompt: "My child is [...] years old. Suggest a variety of household chores that they can help with safely, considering their age and abilities. Focus on tasks that promote a sense of helpfulness and contribution to the family." - Teacheable Storytelling Prompt: "Generate a story to teach my child about [ Desired Value or Lesson ]. Use [ Characters/Theme based on child's interests ] for the characters and setting. The story should highlight the importance of [ Desired Value 1 ], [ Desired Value 2 ], and [ Desired Value 3 ]." ## Learnings * The isolated nuclear family is a modern anomaly, not the historical norm. Children evolved to be raised within multi-generational communities with diverse caregivers. This isolation places undue burden and stress on modern parents. * Much of modern parenting advice stems from 18th-century manuals written for foundling hospitals, not scientific study or traditional wisdom. This advice often prioritizes efficiency and control over child well-being. * Western parents overuse praise and feel pressured to constantly stimulate their children. This can create anxiety, competition between siblings, and an unhealthy dependence on external validation. ### Alternative Approaches from Traditional Cultures * **Maya (Mexico):** * **Acomedido (Helpfulness):** Children have an innate desire to help. Maya parents foster this by including children in chores from a young age, patiently teaching them, and acknowledging their contributions. * **Cooperation:** Maya parents prioritize family togetherness over child-centered activities. Children learn by observing and participating in adult tasks, fostering cooperation and a sense of belonging. * **Intrinsic Motivation:** Maya parents minimize praise and punishment, focusing instead on fostering intrinsic motivation by connecting with their children, respecting their autonomy, and allowing them to feel competent. * **Inuit (Arctic):** * **Emotional Intelligence:** Inuit parents prioritize calmness and avoid yelling at children. They model emotional regulation and teach children to control their anger through gentle guidance and storytelling. * **No Arguing:** Inuit parents avoid arguing with children, viewing it as unproductive and disrespectful. They use tools like "the look," consequence puzzles, and questions to encourage children to think and learn. * **Hadzabe (Tanzania):** * **Autonomy:** Hadzabe parents grant children significant autonomy, allowing them to explore, play freely, and learn through experience. This fosters confidence, self-reliance, and reduces anxiety. * **Alloparenting:** Hadzabe children benefit from a network of caregivers beyond their parents, including older siblings, other children, and community members. This social support network protects against depression and promotes well-being. ### TEAM Parenting Michaeleen synthesizes these learnings into the TEAM parenting approach: * **Togetherness:** Prioritize family togetherness over child-centered activities. * **Encouragement:** Encourage and guide children, rather than forcing or controlling them. * **Autonomy:** Grant children age-appropriate autonomy to foster confidence and self-reliance. * **Minimal Interference:** Intervene only when necessary, allowing children to learn through experience. ### Everyday Parenting Tools #### Tools for Taming Tantrums * **Energy:** In the calmest, lowest-energy state possible, simply stand near the child, silently, and show them that you are close by, supporting them. * **Physicality:** Reach out and gently touch the child on the shoulder or offer a hand. Sometimes a soft, calm touch is all a child needs to calm down. * **Awe:** Help the child replace their anger with the emotion of awe. Look around and find something beautiful. Tell the child, in the calmest, most gentle voice, “Oh wow, the moon is so beautiful tonight. Do you see it?” * **Outside:** If the child still won’t calm down, take them outside for some fresh air. Gently lead them outside or pick them up. #### Tools for Changing Behavior and Transmitting Values * **The look:** Take whatever you want to say to a misbehaving child and channel it into your facial expression. Open your eyes wide, scrunch up your nose, or shake your head. Then shoot the look over to the child. * **Consequence puzzle:** Calmly state the consequences of the child’s actions, then walk away (e.g., “You’re going to fall off and hurt yourself”). * **Question:** Instead of issuing a command or instruction, ask the child a question (e.g., “Who’s being mean to Freddie?” when a child hits a sibling, or “Who’s being disrespectful?” when a child ignores a request). * **Responsibility:** Give a misbehaving child a task to do (e.g., say to a whining child in the morning: “Come over and help me make your lunch”). * **Action:** Instead of asking a child to do a task (e.g., leave the house), just do the task yourself. The kid will follow. #### Tools for Sculpting Behavior ##### Stories * **Tell a story from your childhood:** Explain how you and your parents handled a mistake, problem, or misbehavior. Were you punished? How did you react? * **Put on a puppet show:** Get a stuffed animal or a pair of socks to act out the consequences of the child’s behavior and how you would like them to behave. Have them play one of the characters in the show. * **Bring the problem into the play zone:** Tell the child, “I noticed we’ve been arguing a lot about homework [or whatever problem you have]. Let’s play a game about it. Who do you want to play? Me or you?” Then reenact in a fun way what happens during the argument. Don’t be afraid to exaggerate and act outrageous. The goal is to laugh and release tension built up over the issue. * **Use a monster story:** Create a monster that hides out near your house. Tell the child the monster is watching and if the child misbehaves in a particular way, the monster will come and take them away (for only a few days). * **Bring an inanimate object to life:** Have a stuffed animal, piece of clothing, or other inanimate object help you coax a child to complete a task. Have the object do the task itself (e.g., brush a stuffed animal’s teeth) or have the object ask the child to do a task (e.g., have a toothbrush ask the child to brush their teeth). ##### Dramas * **Stage a drama:** In a peaceful, calm moment, stage a reenactment of what happened when the child misbehaved. Typically the performance starts with a question, tempting the child to do something she knows she shouldn’t. For example, if the child hits others, the mom may start a drama by asking, “Why don’t you hit me?” Then the child has to think: “What should I do?” If the child takes the bait and hits the mom, the mom doesn’t scold or yell, but she performs a reenactment of what happened, using a slightly playful, fun tone. She acts out the consequences. “Ow! That hurts!” she might exclaim. The mom continues to emphasize the consequences by asking follow-up questions to the child. For example: “Don’t you like me?” or “Are you a baby?” These questions continue to trigger thought. They also link the desired behavior with maturity and the undesirable behavior with infancy. * **Bring the problem to the play zone:** Wait for a calm, peaceful moment during the day (*not* at the time of the problem) and say something like this to the child: “Hey, Rosy, I’ve noticed there’s been a lot of arguing around bedtime. Let’s play a game about that.” * **Put on a puppet show:** Take two stuffed animals—or even a pair of socks—and make them into characters who aren’t related to you and your child. This approach will help ensure the child feels relaxed and not like they’re being disciplined or lectured. Then set the scene, act out the problematic activity, and then act out the consequences of that behavior. --- # Getting Real URL: https://www.rasulkireev.com/getting-real/ Type: book Date: 2025-02-22 Description: Building software doesn’t need a large team, huge budget, or a perfect plan up front. Products should do less and work smarter by focusing on solving real problems and evolving with user feedback. The key is to create sustainable software by making smart, incremental improvements that truly meet users’ needs. Author: 37 Signals Tags: Software Development, Entrepreneurship, Product Management, Startup, Web Applications, Minimalism, Business Strategy, User Experience, Agile, Project Management, Marketing, Customer Support, Software Design, Lean Startup, Bootstrapping Content: ## My Thoughts One of my favorite books. So action packed, relevant and appliacable. I have read it 3 times now. And will probably re-read it again in the future. If you want to create your own business this is a must read. It doesn't matter if you can code or not. This books will be useful for any type of person. The coolest thing is that it is still mega applicable even with all the recent advances in AI. ## Problems with summarizing this book I read all my books in Readwise Reader. So, my reading flow involves reading the full text, and taking highlights to remember the things that stood out the most to me. Then, go over those highlight and write a summary. Recently I have been integrating AI into this flow by helping me sinthesize my highlights into a summary, in different ways. I'll write a separate post about this in detail. The reason I metnion this here is that that flow is nearly impossible for this book. Getting Real is so dense that it is hard to compress further. I heard DHH mention somewhere that in writing this book they have thrown out a lot, and it shows! ## Learnings - Build less than your competitors - solve simple problems well rather than tackling complex ones - Solve problems you personally experience - this ensures genuine passion and understanding - Self-fund if possible - constraints drive innovation and force faster market validation - Fix time and budget, but keep scope flexible - better to make half a product than a half-assed product - Focus on a core target market - don't try to please everyone - Make opinionated software with a clear vision - take a stance and stick to it - Say no to most feature requests - only build what's absolutely essential - Launch quickly and iterate based on real feedback - don't wait for perfection - Keep your code and features simple - complexity grows exponentially with each addition - Design the interface first - it's cheaper to change design than code - Write good copy - every word in your interface matters and is part of the design - Skip long functional specifications - they rarely match the final product - Give something away for free to attract customers - Make signup and cancellation processes painless - avoid contracts and tricks - Build buzz through blogs and preview releases rather than expensive advertising - Let customers help each other through forums and community features - Be transparent about problems and quick to communicate issues - Keep showing progress after launch through regular updates and blog posts - Don't hide behind "beta" labels - commit to quality from day one - Prioritize bugs - not all issues need immediate fixing - Stay lean as you grow - resist feature bloat and unnecessary complexity - Focus on execution - ideas are common, but great execution is rare - Maintain a balance between design, code, promotion, and support - weakness in any area can sink the product --- # Throw Away Your Code URL: https://www.rasulkireev.com/throw-away-dead-code/ Type: article Date: 2025-02-18 Description: Discover why removing dead code is essential for maintainable software, better debugging, and team productivity. Learn practical strategies for identifying and eliminating unused code. Tags: Software Development, Code Quality, Clean Code, Developer Tips, Best Practices Content: > Source code is read many, many more times than it's written, so it's usually worth some effort to help make the code more human-readable. This quote from [Pragmatic Thinking and Learning](/pragmatic-thinking-and-learning) resonated with me during a recent experience at Readwise. Last week, while investigating user reports about tweet saving issues, I stumbled upon two functions: pull_tweet_v1 and pull_tweet_v2 (simplified for brevity). As a new engineer, I naturally gravitated toward v2, assuming newer meant better. After some time, I learned from a colleague that v2 was actually deprecated - Twitter's API changes had forced us back to v1, but the obsolete code remained, silently misleading anyone who encountered it. This experience highlighted a common challenge in software development: we form [emotional attachments to our code](https://www.codereadability.com/emotional-attachment-to-code/). Every function represents hours of effort, making it surprisingly difficult to hit that delete key. We keep code around "just in case" or because "[we spent so much time on it](https://www.nateliason.com/blog/option-not-obligation)." But this attachment comes at a cost. As 37 Signals notes in Getting Real: > You'd think that twice as much code would make your software only twice as complex. But actually, each time you increase the amount of code, your software grows exponentially more complicated. Each minor addition, each change, each interdependency, and each preference has a cascading effect. Dead code isn't just harmless [digital clutter](https://paulstamatiou.com/digital-clutter) - it's a silent productivity killer. When debugging, every line is a potential suspect, and dead code creates false leads that waste precious time. New team members must wade through [unnecessary complexity](https://michaeljennings.blogspot.com/2011/08/unnecessary-complexity.html), trying to understand relationships between components that no longer matter. The solution? As [Getting Real](/getting-real) suggests: "The way you fight this complexity is with less software. Less software means less features, less code, less waste." When you find dead code, document what you're removing and why. If there's valuable logic worth preserving, capture it in documentation. Remember, Git history is always there if you need to reference something later. Making this a regular practice isn't easy - it requires overcoming our natural instincts to hold onto things we've created. But like cleaning out an old closet, the result is always worth it. The only real price is a small hit to our ego, and that's a price worth paying for the sake of those who'll work with our code in the future - including our future selves. --- # Create Smarter & Better Git Commits with AI URL: https://www.rasulkireev.com/commit/ Type: tutorial Date: 2025-02-03 Description: Learn how to automate Git commit messages using AI and Bash scripting. This tutorial shows you how to create meaningful, consistent commits with minimal effort. Tags: Git, Bash Scripting, AI, Developer Tools, Automation, Python, DevOps Content: How many times have you stared at your terminal, trying to craft the perfect git commit message? Probably not much. I know what you have done often though... ```bash git add --all git commit -m "fix" git push ``` If you are a super lazy person like, me you maybe even created a git alias for that and only have to do: ```bash git cm "fix" gp ``` Today I decided to change this forever. I decided to be the most thoughtful person in he world and think about my future self an anyone who is going to search for my code in the future... Enter `commit`. ## 🙏 The Script ```bash #!/bin/bash check_git_repo() { if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then exit 1 fi } check_changes() { if [ -z "$(git status --porcelain)" ]; then exit 0 fi } generate_commit_message() { local diff_content=$(git diff --cached) local files_changed=$(git status --porcelain) echo -e "Files changed:\n$files_changed\n\nChanges:\n$diff_content" | \ llm -m anthropic/claude-3-5-sonnet-latest \ "Generate a git commit message for these changes. The message must have: 1. TITLE LINE: A specific, concise summary (max 50 chars) that clearly describes the primary change or feature. This should not be generic like 'Update files' but rather describe the actual change like 'Add user authentication to API endpoints' 2. BLANK LINE 3. DETAILED DESCRIPTION: A thorough explanation including: - What changes were made - Why they were necessary - Any important technical details - Breaking changes or important notes Wrap this at 72 chars. IMPORTANT: - Output ONLY the commit message - Make sure the title is specific to these changes - Focus on the what and why, not just the how" } # Main execution main() { check_git_repo check_changes git add --all commit_message=$(generate_commit_message) git commit -m "$commit_message" } main "$@" ``` ## ⚒️ Breaking it Down 1. **Repository Validation** ```bash check_git_repo() { if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then exit 1 fi } ``` This function ensures we're working within a git repository. 2. **Change Detection** ```bash check_changes() { if [ -z "$(git status --porcelain)" ]; then exit 0 fi } ``` Verifies that there are actually changes to commit. 3. **AI-Powered Message Generation** ```bash generate_commit_message() { local diff_content=$(git diff --cached) local files_changed=$(git status --porcelain) echo -e "Files changed:\n$files_changed\n\nChanges:\n$diff_content" | \ llm -m anthropic/claude-3-5-sonnet-latest \ "Generate a git commit message for these changes. The message must have: 1. TITLE LINE: A specific, concise summary (max 50 chars) that clearly describes the primary change or feature. This should not be generic like 'Update files' but rather describe the actual change like 'Add user authentication to API endpoints' 2. BLANK LINE 3. DETAILED DESCRIPTION: A thorough explanation including: - What changes were made - Why they were necessary - Any important technical details - Breaking changes or important notes Wrap this at 72 chars. IMPORTANT: - Output ONLY the commit message - Make sure the title is specific to these changes - Focus on the what and why, not just the how" } ``` This is where the magic happens - the script analyzes your changes and uses AI to generate a meaningful commit message. The script uses [Simon Willison](https://simonwillison.net/)'s `llm` [command-line tool](https://github.com/simonw/llm), which is an incredibly useful utility for interacting with various AI models directly from your terminal. Head over to his [documentation](https://llm.datasette.io/) to learn more about it. How to set it up and actually use it. Please note that I use anthropic's model in this script, which means you will have to set up the [llm-anthropic](https://github.com/simonw/llm-anthropic) plugin. ## 💻 Setting it up To run this, just create a commit file and add it your bin directory, such that it ends up in you PATH. Don't forget to run ```bash chmod +x ~/.local/bin/commit ``` to make the script executable. Of course, update the path to the script depending on where you save it. ## 🎉 Yay Now after working hard on your code you'll just have to run `commit` and you'll get a commit message generated by AI. --- # 2025 Goals URL: https://www.rasulkireev.com/2025-goals/ Type: article Date: 2025-02-02 Description: In this post, I want to publicly list all my 2025 goals. This will help keep me accountable and more structured. Though I doubt I will be consulting it often. Tags: 2025, goals, habits, review Content: My 2024 Annual Review was a little all over the place. I think this is due to lack of goals set in the beginning of the year. I'm going to avoid this mistake this year. Here are my goals for 2025. ## Health Health is going to be a huge part of 2025 for me. I think if I prioritize this the rest will fall in place. - Sleep!!! Give Theo's early rise at 5:30-6:30, bedtime should be around 9pm! No way around that. Even if it is not me waking up, still the same. That way I get more energy to do other things. - Slowly and methodically reduce sugar consumption. Right now the main culprits are Yoghurt with sugar, after dinner dessert... And munching on shit food when good food is available in the fridge. - Physical Activity. This should include morning exercise with Theo. Fighting training twice a week and weightlifting twice a week. ## Work These are less quantifiable on more feel based. For instance the last 2 weeks of January have been much better than the first 2. - Complete tasks on dev planning! - Do work that will help me and others in the future (such as log charts on new relic, documentation) - Be proactive about fixing bugs that are easy to fix ## Family - Be more proactive about my relationship with Tanya. I think [[The Way of the Superior Man]] is a fantastic source for that! - Continue spending time with Theo! I've been pretty good with that in 2024. ## Personal Work I don't have a lot of time to work on side projects unfortunately. This became apparent in my experiment to put them on pause for two weeks to see how this reflects my work and I was much happier with my progress. I'm not ready to stop my pursuit of creating my own business, so I will continue working on them. Though I need to be smart about it, here. Now that I have stabilized my work work, I'm slowly going to insert more Side Project work, bit by bit. Here are some things to keep in mind. - Work on highest potential projects (preferring the existing ones) - Automate the process as much as possible! - Prefer working on marketing. - When coding, work on highest impact tickets. ## Learning - I'm not going to put any specific tech to learn in 2025. I think through the virtue of goals above some things will come naturally. Plus, my previous expserience has shown that interests change during the year. I have no concrete desire to learn anything specific, so I don't need to be too intentional about it. If I had to choose something it would be learning to automate work with AI. - My reading habit has been pretty good in [[2024 in Review | 2024]], especially when I've been going to bed early. Keep it up in 2025. - Be a little more consistent with daily logs. Which should help me with consistency on the weekly and monthly logs. Many times during the year I felt like I haven't done much from day to day, later to look at the month and realize that quite a bit was done. I want to reduce this useless feeling of unproductivity. --- # 2024 in Review URL: https://www.rasulkireev.com/2024/ Type: article Date: 2025-01-19 Description: My 2024 in Review I was very sad that I didn't finish this post last year. I hope to keep the tradition in the future. Tags: Annual Review, 2024 Content: This's Year's Annual Review is a little hectic. I started it around Jan 5th, but then added more to it, bit by bit. Plus, the start of the year hasn't been that great from productivity standpoint. Thankfully I have picked up the pace in the last 2 weeks. So, was finally able to complete it. Clearly no one will care about it but me, so I'm not sure why I am even posting it, could have left it in my Obsidian... But I'm posting it anyway, for history. Plus, I did leave out some juicy stuff from my personal life in my private collection 😈. If you are reading it, thanks for the interest. Feel free to ask me any questions, and I will be happy to answer. ## Data Data is always the most entertaining part of anyone's annual review. So, I will start with that. I will leave the rest for myself and anyone who is curios about me. I imagine that is not a lot of people. ### Reading ``` This is from my Readwise Reader Usage. Here is the script I used: https://gist.github.com/rasulkireev/9402416ae04e3857af3a41ef774bab03 📚 READWISE READER STATISTICS 2024 📚 ================================================== 📊 OVERALL METRICS Total items: 437 Items with word count: 430 Total words read: 4,471,100 Average words per item: 10,397 Completed items: 160 Partially read items: 192 📑 BREAKDOWN BY CATEGORY ---------------------------------------- Article : 254 items | 415,689 words | avg: 1,636 words/item Rss : 98 items | 134,820 words | avg: 1,375 words/item Epub : 37 items | 3,778,468 words | avg: 102,120 words/item Email : 27 items | 32,976 words | avg: 1,221 words/item Tweet : 10 items | 10,494 words | avg: 1,049 words/item Video : 6 items | 0 words | avg: 0 words/item Pdf : 5 items | 98,653 words | avg: 19,730 words/item 📅 MONTHLY DISTRIBUTION ---------------------------------------- December : 18 items November : 65 items October : 17 items September : 22 items August : 33 items July : 25 items June : 17 items May : 25 items April : 74 items March : 39 items February : 41 items January : 61 items ✍️ TOP AUTHORS ---------------------------------------- Nick Maggiulli : 16 items Jakob Greenfeld : 12 items Justin Duke : 8 items Nat Eliason : 7 items jmduke.com : 5 items 📈 Completion Rate: 36.6% ``` ``` # Here is the script to get this data: # https://gist.github.com/rasulkireev/7ceffa24e543dc513d128e4330e0e39b 📚 READWISE ACTIVITY SUMMARY 2024 📚 ================================================== 📊 OVERALL METRICS Total books/articles with highlights: 215 Total highlights made: 2,294 Total notes added: 225 Favorite highlights: 1 📑 HIGHLIGHTS BY CATEGORY ---------------------------------------- Books : 1628 highlights across 55 sources Articles : 645 highlights across 150 sources Tweets : 21 highlights across 8 sources 📅 MONTHLY DISTRIBUTION ---------------------------------------- January : 247 highlights February : 123 highlights March : 104 highlights April : 59 highlights May : 98 highlights June : 203 highlights July : 158 highlights August : 114 highlights September : 149 highlights October : 204 highlights November : 447 highlights December : 388 highlights 📖 TOP 5 MOST HIGHLIGHTED SOURCES ---------------------------------------- How to Read a Book : 281 highlights Getting Real - The Smarter, Faster, Easier Way to : 178 highlights The Art and Business of Online Writing: How to Bea : 161 highlights Alpha Trader : 129 highlights Нетворкинг для разведчиков: Как извлечь пользу из : 108 highlights 🔍 SOURCE DISTRIBUTION ---------------------------------------- reader : 2287 highlights twitter : 5 highlights voicenotes : 1 highlights api_book : 1 highlights ``` ### Built with Django ``` 2024 Statistics 📊 Project Statistics: New Projects: 68 💼 Job Statistics: New Jobs Posted: 126 Remote Jobs: 89 📝 Blog Statistics: Tutorial: 4 <- Wow, that's bad. Got to step it up in 2025 👨💻 Developer Statistics: New Developers: 85 Looking for Job: 20 Role Distribution: - Junior: 5 - Mid: 73 - Senior: 4 - Principal: 3 - C_Level: 0 👤 User Statistics: New Users: 1953 Pro Users: 2 Public Profiles: 1911 GitHub Connected: 17 Twitter Connected: 11 📧 Newsletter Statistics: New Subscribers: 5953 <- I bet only 5% of that is real. Jesus, there are so many bots going around on the web. ```    ### TJ Alerts ``` ================================================== 💼 JOB POSTING STATISTICS 2024 ================================================== 📊 CORE JOB METRICS Total Jobs Posted: 4,202 Remote Jobs: 2,588 (61.6% of all jobs) Onsite Jobs: 1,956 (46.5% of all jobs) 💰 SALARY INFORMATION Jobs with salary info: 4,202 (100.0%) Average salary range: $27,281 - $35,463 📅 MONTHLY JOB POSTINGS ------------------------------ January | ██████████████ 303 February | █████████████████ 357 March | ███████████████ 319 April | ██████████████ 311 May | ████████████████████ 419 June | █████████████████ 369 July | ███████████████████ 404 August | ████████████████ 341 September | ████████████████ 337 October | ████████████████ 355 November | ███████████████ 335 December | ████████████████ 352 🔧 TOP 10 MOST IN-DEMAND TECHNOLOGIES -------------------------------------------------- 1. Python | 737 jobs (17.5%) 2. React | 689 jobs (16.4%) 3. AWS | 442 jobs (10.5%) 4. Typescript | 371 jobs ( 8.8%) 5. TypeScript | 292 jobs ( 6.9%) 6. Postgres | 253 jobs ( 6.0%) 7. Kubernetes | 233 jobs ( 5.5%) 8. Rust | 229 jobs ( 5.4%) 9. Go | 207 jobs ( 4.9%) 10. PostgreSQL | 183 jobs ( 4.4%) ================================================== 🔍 CONFIRMED ALERT SYSTEM ANALYTICS 2024 🔍 ================================================== 📊 CORE METRICS Total Confirmed Alerts: 134 Currently Active Alerts: 104 Email Notifications Sent: 1,965 👥 USER ENGAGEMENT Registered Users: 37 (27.6%) Non-registered Users: 97 (72.4%) 📈 PERFORMANCE METRICS Unsubscribe Rate: 22.4% 📅 MONTHLY GROWTH ------------------------------ January | ████ 8 February | █████ 9 March | ██████ 11 April | █████ 9 May | ████████████████████ 36 June | ██████████████████ 33 July | ████ 8 August | ██ 5 September | ██ 4 October | ██ 4 November | █ 3 December | ██ 4 🎯 TOP 10 MOST WATCHED TECHNOLOGIES -------------------------------------------------- 1. React Native | 15 alerts (11.2%) 2. React | 13 alerts ( 9.7%) 3. Python | 11 alerts ( 8.2%) 4. Django | 10 alerts ( 7.5%) 5. PHP | 9 alerts ( 6.7%) 6. C# | 9 alerts ( 6.7%) 7. Elixir | 7 alerts ( 5.2%) 8. Python/Django | 4 alerts ( 3.0%) 9. Ruby on Rails | 3 alerts ( 2.2%) 10. Go | 3 alerts ( 2.2%) ```     ### SEO Blog Bot The images here include the full month of January in 2025. Sorry, got a little lazy there.      ### Notes ``` 2 Tag/Concept Notes Created 185 Content Notes Created 422 Total Notes Created # Notes by Folder Distribution Shows where you're creating most of your notes | Folder | Count | |-------------------------------|-------| | notes/archive | 2 | | notes/inbox | 8 | | notes/ongoing | 11 | | notes/ongoing/archive | 1 | | notes/ongoing/to_post | 2 | | notes/recurring/daily | 142 | | notes/recurring/yearly | 3 | | notes/writings | 6 | | notes/writings/done | 6 | | notes/zettelkasten/literature | 4 | | people | 3 | | sources/Readwise | 229 | | tagnotes | 2 | # Linking Statistics Shows which notes are most connected to others | File | Outgoing Links | Incoming Links | Total Connections | |----------------------------------------------------------------------------------------|----------------|----------------|-------------------| | Oh Crap! I Have a Toddler | 30 | 1 | 31 | | The Algebra of Wealth | 28 | 2 | 30 | | How to Do Great Work | 28 | 0 | 28 | | robotics is sort of happening in our peripheral vision now 202406271748 | 25 | 1 | 26 | | Сравнительные Жизнеописания | 20 | 0 | 20 | | the imperfect project you actually complete is worth more than the perfect project... | 19 | 1 | 20 | | having a social component in a place where you post can be a big boost... 202411020830 | 17 | 1 | 18 | | The Beginning of Infinity | 16 | 0 | 16 | | courses I own | 14 | 0 | 14 | | browser extensions allow and encourage users to modify the apps... 202406271853 | 13 | 1 | 14 | # Monthly Creation Patterns Shows your note creation patterns by month | Month | Notes Created | |----------|---------------| | 2024-01 | 48 | | 2024-02 | 27 | | 2024-03 | 23 | | 2024-04 | 26 | | 2024-05 | 30 | | 2024-06 | 34 | | 2024-07 | 41 | | 2024-08 | 44 | | 2024-09 | 33 | | 2024-10 | 36 | | 2024-11 | 48 | | 2024-12 | 32 | # Weekly Activity Patterns Shows which days of the week you're most active | Day | Notes Created | |-----------|---------------| | Tuesday | 85 | | Wednesday | 84 | | Monday | 66 | | Thursday | 61 | | Friday | 56 | | Saturday | 43 | | Sunday | 27 | ``` ### Writing I got a little lazy here. There is much more I can get, like character count, but I'll leave it until next year.  ## Family The biggest event that happened with our family is that we had to temporarily move back to Russia for some time. This was a very annoying disturbance to our way of life. We had a rhythm, Tanya and I, dealing with life, work and a year old son. The moving process was hectic, but we got it done. Moved all our belongings in the storage, sold our car, bought airplane tickets and packed 9 bags to travel back with us. The trip went much better than expected. All of our bags went to the final destination and we got a long layour after our first flight, which allowed us to sleep. Thank god Theo decided to sleep with us. This was in February, so we spent most of the year in Russia. First 2 months we lived with my mom. She helped us, while we slowly got back up on our feet which we are very grateful for. My sister Aida was very helpful too, the way that they bonded with Theo still means a lot to me. Of course when you have a 1 year old most of the year will be about him. He made a lot of progress this year, which made Tanya and I very happy. I'm not going to list it all, cause the list is pretty generic for babies this age. We and I are happy to see how is growing up. This means that we didn't get to spend too much quality time with my wife, alone. But, we are trying every chance we have. Work in progress. All in all this has been a great year. Yes, some bad moments, bad fights, but I'm very happy about the family I have and the direction we are going in. ## Readwise This was my first full year at Readwise. I joined in November 2023. This has been an amazing year. Got to work on so many different parts of the project. I worked both on Readwise and Reader. Bother mobile and web. Frontend and backend. App and Analytics. The diversity of skills required on my part has never been so broad. For a person whose life goals to be a highly skilled generalist this is a dream come true. People I work with are amazing. To be honest, I have always been lucky with people I work with. In my short period of working at 5 companies people have always been great, smart and kind. One thing that Readwise beats all those companies in is that I get to know all the people I work for. In my previous experience of working for larger companies I only got to work with people in my department. Here, though, with a full team of 23 people, I know each single person. People from Finance, CX, Engineering, Business Operations, everyone. I got to go to Curacao on an offsite to meet personally with the team (since we are a remote team). It was amazing. Even the 36+ travel time to that location did not take away from the experience. Though I've got to admit, I love flying, especially when I get to do it alone (without my wife and son 🙈). Here are some professional highlights from working at Readwise: - Started using and valuing logs a lot. Became much better at NRQL queries to use as app usage analytics. - Gained a much better understanding (and appreciation of complexity) of models and data. It ain't easy parsing web content reliably. - Here are some projects I worked on: - Allow users to customize their import emails - Advanced email subscriptions management (sub/unsub) - Data Analytics on large, large data for various questions people had. Those could be revenue related or app usage related. When you have a lot of users and a lot of data, it is much more fun to ask questions. Though at the same time hard to answer them too. - Better internal tracking of user journey. - I've worked a lot on our Export and Import integrations. This is not the code I wrote. So this is less fun, I just have to make sure to fix bugs and monitor nothing breaks. Since each integration is a separate module it takes a lot of time to learn and understand, which makes my work much slower makes me conscious a lot. ## Personal Work I'm the type of person that always thinks he is not doing enough. The Impostor Syndrome is my good old friend by now. This Annual Review and any type of long term review is extremely useful to cope with that nasty thing. Day to day you think that not much is done, then you zoom out and you see that you actually made some good progress. This is a summary of the progress I made this year. This has been a good year. Not the whole year, though. I was able to do some work on my existing projects, but it all exploded in Fall. Tanya and I found a wonderful daycare for Theo which added 3-4 additional hour in my day. And once that happened I went nuts. First project I decided to make was a replacement for ogi.sh, which is a programmatic OG-image generator. It was closed by the creator and I decided to whip up a quick version of my own. While doing that I spent a lot of time updating my cookiecutter for django based Saas projects. This second part actually took a while, but the ROI was amazing. Write after getting OSIG stable, I started working on Statushen. For some reason I thought it would be a profitable project. But to be honest with you I was so in the zone while coding it, I actually can't remember whether I launched it or not. I started using it for all my projects as a Stasus page for my services, but it didn't get much traction. Well, the infrastructure is there and maybe I can work on it in 2025, we will see. Needless to say, this project helped me update Saas Starter Kit even further, which brings me to the next point. The next project I decided to make was inspired by John Rush. He was building seobotai, which I thought was very cool. I sort of stole the idea and decided to put a spin on it. I'm currently using it for all my projects, but not nearly enough. I think this is the project that has the most potential. There are already a couple of trial users, even without me launching it officially. I definitely need to think about this product more in 2025. There is a lot I can do I think. One notable thing I have done with one of my existing projects is adding advertising more heavily on Built with Django. I have been reaching out to various companies in the attempt to get some server funding. It worked Ramy from Hovercode decided to pay for a sponsored post and reported back with good results even providing me with a testimonial. One last thing I want to mention here is that this year has had another big event in my professional life. I have finally made my first business acqusition. I bought Is It Keto from Michael Lynch, who made this process a dream come true. I wrote more about it here. --- # AI Prompts Suggestions URL: https://www.rasulkireev.com/ai-prompts-suggestions/ Type: prompt Date: 2025-01-06 Description: This prompt helps come up with AI prompt ideas could help me automate some tasks, using the highlights I made in the book. Tags: AI, Prompts, Book Content: I recently tried to add a small change in my life. After every book I read, I try to come up with some ways I could use the learning from the book to automate or improve some parts of my life or work. Prompt below helps uses the highlights I made (ideas that I though were the most important in the book) to come up with those ideas. It has been working very well. ``` Here is some info about the book I just finished reading: Title: {{ book_title }} Author: {{ book_author }} Below are the highlights I made from the book: {{ book_highlights }} Can you come up with some ideas for AI prompts that I could use to automate or improve some parts of my life using the ideas from the highlights attached. ``` --- # Analyze the Book's Table of Contents and Index URL: https://www.rasulkireev.com/analyze-book-itoc/ Type: prompt Date: 2024-12-26 Description: This prompt helps to analyze book's table of contents. Tags: Reading, Book, Structure Content: This prompt was inspired by an awesome book "[How to Read a Book](/how-to-read-a-book)" by Mortimer Adler. ``` {#- BACKGROUND: This prompt analyzes a book's table of contents and index to provide additional insight into its structure and nature. -#} Please analyze these book components: === Title: {{ document.title }} Author: {{ document.author }} TABLE OF CONTENTS: {{ document.content.toc }} INDEX: {{ document.content.index }} Please analyze both components: 1. TABLE OF CONTENTS ANALYSIS - Organization method (chronological, topical, etc.) - Major sections/parts structure - Progression of ideas/topics - Depth and breadth of coverage - Notable patterns in chapter arrangement 2. INDEX ANALYSIS - Key concepts and their frequency - Main themes based on cross-references - Depth of subject coverage based on sub-entries - Special terms or technical vocabulary - Notable omissions or emphasis 3. COMBINED INSIGHTS - Relationship between TOC structure and index entries - Subject matter coverage patterns - Target audience indicators - Theoretical vs practical content indicators Based on your analysis, provide: ## Book Structure Overview [One paragraph synthesizing the book's overall organization and approach] ## Core Subject Areas [Bullet list of 3-5 main themes or subjects, with brief context for each] ## Knowledge Prerequisites [One paragraph identifying what the reader should know before starting] ## Recommended Reading Strategy [One paragraph suggesting specific approach based on book's structure] {#- NOTE: Focus on insights that will help readers efficiently navigate and understand the book. -#} ``` --- # Find key sentences URL: https://www.rasulkireev.com/find-key-sentences/ Type: prompt Date: 2024-12-25 Description: This prompt helps identify and analyze important sentences in a text, following Mortimer Adler's sixth rule of analytical reading from "How to Read a Book". Tags: Reading, Book, Analysis, Understanding, Arguments Content: This prompt was inspired by Mortimer Adler's "[How to Read a Book](/how-to-read-a-book)". It helps identify and analyze the most important sentences in any text, which is essential for understanding the author's key arguments and main propositions. I actively use this prompt in my [Readwise Reader](https://readwise.io/i/rasul) workflow to: - Identify crucial arguments and claims - Extract core propositions - Connect major ideas together - Build a quick reference of key points ``` {#- BACKGROUND: This prompt helps identify the most important sentences in a book and discover their propositions, following Mortimer Adler's sixth rule of analytical reading. -#} You are an expert reader trained in analytical reading. Your task is to identify the most important sentences in the text and discover their propositions. Find 3-5 of the most important sentences in the text. Focus on sentences that: - Contain the author's key arguments or conclusions - Introduce important concepts or principles - Make significant claims or assertions - Connect major ideas together For each identified sentence: 1. Quote the sentence 2. Explain in 2-3 lines why this sentence is crucial to understanding the author's message and what proposition it contains Here is the text to analyze: """ Title: {{ document.title }} Author: {{ document.author }} Domain: {{ document.domain}} {% if (document.content | count_tokens) > 2000 %} {{ document.content | central_sentences | join('\n\n') }} {% else %} {{ document.content }} {% endif %} """ Please list the key sentences and their significance, being concise but precise in your explanations. ``` --- # Find the Author's Problems URL: https://www.rasulkireev.com/find-authors-problems/ Type: prompt Date: 2024-12-25 Description: This prompt helps identify the problems that the author tried to address in his book. Tags: Reading, Book Content: This prompt was inspired by an awesome book "[How to Read a Book](/how-to-read-a-book)" by Mortimer Adler. It actually works pretty well. I use it in [Readwise Reader](https://readwise.io/i/rasul) project, to help me identify the kind of book I am about to read. ``` {#- BACKGROUND: This prompt helps identify the problems or questions that the author is trying to solve or answer in their work. This is Rule 4 of analytical reading: "FIND OUT WHAT THE AUTHOR'S PROBLEMS WERE." Understanding the author's problems is crucial for truly grasping the book's purpose and message. -#} Your task is to analyze the document and identify the key problems or questions that the author is trying to address. Consider that: - Authors start with questions, even if they don't explicitly state them - The book contains the answers to these questions - The problems should be formulated as precisely as possible - Questions should be ordered by importance (primary vs secondary) === Title: {{ document.title }} Author: {{ document.author }} Domain: {{ document.domain}} {#- The if-else logic below checks if the document is very long, long, or short to not exceed the GPT prompt window. -#} {% if (document.content | num_tokens) > 25000 %} {{ document.html | central_paragraphs | join('\n\n') }} {% elif (document.content | num_tokens) > 2500 %} {{ document.content | central_sentences | join('\n\n') }} {% else %} {{ document.content }} {% endif %} Please identify and list: 1. The main problem or question the author is trying to solve 2. The subordinate problems or questions that support the main one 3. The order of these problems (which must be solved first to answer others) Format your response as: ## The Author's Problems ### Main Problem [State the primary question/problem in one clear sentence] ### Supporting Problems 1. [First supporting problem] 2. [Second supporting problem] 3. [Third supporting problem] (etc.) ### Problem Hierarchy [Brief explanation of how these problems relate to each other and why they are ordered this way] IMPORTANT: Focus on identifying actual problems the author is trying to solve, not just topics they discuss. The problems should be specific enough to guide understanding but broad enough to encompass the book's major themes. ``` --- # Find Key Terms URL: https://www.rasulkireev.com/find-key-terms/ Type: prompt Date: 2024-12-25 Description: This prompt helps identify and analyze important terms in a text, following Mortimer Adler's fifth rule of analytical reading from "How to Read a Book". Tags: Reading, Book, Analysis, Vocabulary, Understanding Content: This prompt was inspired by Mortimer Adler's "[How to Read a Book](/how-to-read-a-book)". It helps identify and understand key terms in any text, which is crucial for deep comprehension and analytical reading. I actively use this prompt in my [Readwise Reader](https://readwise.io/i/rasul) workflow to: - Identify crucial terminology - Understand special usage of common words - Connect key terms to main arguments - Build a quick reference glossary ``` {#- BACKGROUND: This prompt helps identify and understand key terms in a text, following Mortimer Adler's fifth rule of analytical reading: "FIND THE IMPORTANT WORDS AND THROUGH THEM COME TO TERMS WITH THE AUTHOR." -#} Analyze the following text and help me: 1. Identify the most important words that: - Give me trouble understanding - Are used in an unusual or special way - Appear to be crucial for understanding the author's message - Are used repeatedly throughout the text 2. For each important word found: - Show how the author uses it in context - Explain its specific meaning in this text - Compare it with its common usage (if different) - Connect it to the author's main arguments === Title: {{ document.title }} Author: {{ document.author }} Domain: {{ document.domain}} {#- The if-else logic below checks if the document is long. If so, it will use key sentences to not exceed the GPT prompt window. We highly recommend not changing this unless you know what you're doing. -#} {% if (document.content | count_tokens) > 2000 %} {{ document.content | central_sentences | join('\n\n') }} {% else %} {{ document.content }} {% endif %} === Present your findings in this format: ## Quick Reference - [Word 1]: Simple explanation in 10-15 words - [Word 2]: Simple explanation in 10-15 words [etc.] ## Detailed Analysis ### [Word 1] - Context: [relevant quote(s) showing usage] - Author's Usage: [specific meaning in text] - Common Usage: [if different from author's usage] - Connection to Main Arguments: [how it relates to key points] [Repeat for each important word] IMPORTANT: Focus on words that are truly significant for understanding the author's message. Quality over quantity. The Quick Reference section should be easily scannable and understood by anyone. ``` --- # Analyze key sentences URL: https://www.rasulkireev.com/analyze-key-sentences/ Type: prompt Date: 2024-12-25 Description: This prompt helps identify and analyze important sentences in a text, following Mortimer Adler's sixth rule of analytical reading from "How to Read a Book". It breaks down sentences into their core propositions, explores their significance, and connects them to broader contexts. Tags: Reading, Book Analysis, Critical Thinking, Text Analysis, Comprehension, Adler Method, Literary Analysis, Study Skills Content: This prompt provides detailed analysis of important sentences and their propositions, following Mortimer Adler's sixth rule of analytical reading. It's designed to be used after identifying key sentences. ``` You are an expert reader trained in analytical reading. Your task is to provide a thorough analysis of important sentences from a text. For the following sentence(s), provide a detailed analysis: 1. Deep dive into significance: - Explain how this sentence advances the author's argument - Identify what problem or question it addresses - Describe its role in the larger context of the work 2. Break down the proposition(s): - Restate complex ideas in simpler terms - Define and clarify any difficult concepts - Show logical relationships between ideas - Identify any unstated assumptions 3. Illustrate through examples: - Provide concrete examples that demonstrate the proposition - Suggest relevant analogies that clarify the meaning - Show how the proposition applies in different contexts 4. Connect to broader context: - Link to other key ideas in the text - Show how this proposition builds on or challenges previous points - Identify implications that follow from this proposition Here are the sentences to analyze: """ Title: {{ document_title }} Author: {{ document_author }} Domain: {{ document_domain}} {{ sentences }} """ Please provide a thorough analysis that helps deepen understanding of this sentence and its significance. ``` --- # Analyze the Book's Structure URL: https://www.rasulkireev.com/analyze-book-structure/ Type: prompt Date: 2024-12-22 Description: This prompt helps identify book's structure, which is essential for analytical reading according to Mortimer Adler's "How to Read a Book". Tags: Reading, Book, Structure Content: This prompt was inspired by an awesome book "[How to Read a Book](/how-to-read-a-book)" by Mortimer Adler. I use it in [Readwise Reader](https://readwise.io/i/rasul) project, to help me identify the structure of the book I'm reading. ``` {#- BACKGROUND: This prompt helps identify and understand how the major parts of a book work together to develop its main theme or argument, following Mortimer Adler's second rule of analytical reading. -#} You are an expert at analyzing the structure and organization of books. Help me understand how the major parts of this book work together to form a coherent whole. Please analyze the following text and: 1. Identify the major parts/sections and their main points 2. Explain how these parts relate to and build upon each other 3. Show how they connect to and support the book's central theme/argument 4. Create a visual outline showing the hierarchical relationship between parts Consider: - How earlier parts lay groundwork for later ones - Key transitions and connections between sections - How each part contributes to the book's unity - The logical flow and progression of ideas Here is the content to analyze: === Title: {{ document.title }} Author: {{ document.author }} Domain: {{ document.domain}} {#- The if-else logic below checks if the document is very long in order to not exceed the GPT prompt window -#} {% if (document.content | num_tokens) > 25000 %} {{ document.html | central_paragraphs | join('\n\n') }} {% elif (document.content | num_tokens) > 2500 %} {{ document.content | central_sentences | join('\n\n') }} {% else %} {{ document.content }} {% endif %} Please provide: 1. A brief overview of the major parts/sections 2. An explanation of how they work together 3. A hierarchical outline showing their relationships 4. Commentary on how this structure serves the book's main purpose Focus on understanding and explaining the book's structural unity rather than just summarizing content. Add the following in the beginning of the output: `## Book's Structure` ``` --- # Nature of the Book URL: https://www.rasulkireev.com/nature-of-the-book/ Type: prompt Date: 2024-12-22 Description: This prompt helps identify the kind of book you are about to read, which is essential for analytical reading according to Mortimer Adler's "How to Read a Book". Tags: Reading, Book Content: This prompt was inspired by an awesome book "[How to Read a Book](/how-to-read-a-book)" by Mortimer Adler. It actually works pretty well. I use it in [Readwise Reader](https://readwise.io/i/rasul) project, to help me identify the kind of book I am about to read. ``` {#- BACKGROUND: This prompt helps identify basic classification of the book. -#} Analyze the following book and help me identify what kind of book it is: === Title: {{ document.title }} Author: {{ document.author }} Domain: {{ document.domain }} {#- The if-else logic below checks if the document is long. If so, it will use key passages to not exceed the GPT prompt window. -#} {% if (document.content | count_tokens) > 2000 %} {{ document.content | central_sentences | join('\n\n') }} {% else %} {{ document.content }} {% endif %} Please answer the following questions to help classify this book: - Is this a theoretical or practical book? - What general category does it fall under? (e.g., fiction/non-fiction, science, philosophy, history, etc.) - What specific subject matter does it address? 1. STRUCTURAL INDICATORS - What does the title page tell us about the scope? - What does the table of contents reveal about its structure? - What does the preface or introduction indicate about the author's aims? - How is the index organized (if present)? 1. CONTEXTUAL ELEMENTS - When was it written and in what context? - Who is the intended audience? - What level of expertise does it assume? Based on this analysis, provide: 1. A clear statement of what kind of book this is 2. The main subject matter it covers 3. Any special considerations for reading this particular type of book IMPORTANT: Focus on understanding the nature of the book before diving into its content. This classification will guide how to approach reading it. Also add a heading before output: `## Book's Nature` ``` --- # Unity of the Book URL: https://www.rasulkireev.com/unity-of-the-book/ Type: prompt Date: 2024-12-22 Description: This prompt helps identify the kind of book you are about to read, which is essential for analytical reading according to Mortimer Adler's "How to Read a Book". Tags: Reading, Book Content: This prompt was inspired by an awesome book "[How to Read a Book](/how-to-read-a-book)" by Mortimer Adler. I use it in [Readwise Reader](https://readwise.io/i/rasul) project, to help me identify the main theme of the book ``` {#- BACKGROUND: This prompt helps identify and articulate the unity or main theme of a book in a single sentence or short paragraph, following Mortimer Adler's second rule of analytical reading from "How to Read a Book". -#} Your task is to analyze the following text and express its fundamental unity - the single main point or theme that the entire work revolves around - in one sentence, or at most a short paragraph. === Title: {{ document.title }} Author: {{ document.author }} Domain: {{ document.domain}} {% if (document.content | num_tokens) > 25000 %} {{ document.html | central_paragraphs | join('\n\n') }} {% elif (document.content | num_tokens) > 2500 %} {{ document.content | central_sentences | join('\n\n') }} {% else %} {{ document.content }} {% endif %} INSTRUCTIONS: 1. Consider what single, central point the author is trying to communicate 2. Identify how all major arguments or sections of the book support this central point 3. Express this unity in ONE sentence, or if absolutely necessary, a very short paragraph 4. Focus on WHAT the book is about as a whole, not its method or structure 5. Avoid merely describing what the book talks about; instead, capture its essential message or argument Format your response as follows: ## Unity Statement [Your one-sentence or short paragraph response here] IMPORTANT: - Be concise but complete - Capture the essence, not just the topic - Express the unity in a way that shows how all parts of the book relate to this central point - Avoid listing multiple main points; find the ONE unifying idea ``` --- # How to Read a Book URL: https://www.rasulkireev.com/how-to-read-a-book/ Type: book Date: 2024-12-12 Description: This book is a must read for anyone who wants to read better. It's not easy to read, but it's worth it. Author: Mortimer Adler Content: ## My Thoughts This is not the easiest book to read. It took me 2 tries. When the Analytical Reading is dicussed at great lengths, the book starts to be a little bit dry. That said, the book is definitely worth reading. Not only will you learn how to read better, but you will also get inspired to read more difficult books, that are over your head. This will skyrocket your learning and personal growth. Reading great literature is hard and it requires a lot of work on your part. Mortimer Adler is not hiding this fact from your. He is not giving you rules that will drastically simplify that process. He is giving you a framework that will help you make sure that all your efforts are not wasted. Another thing that I thought a lot about is AI. This books was written when there were no computers. I'm not entirely sure what would Mortimer have to say about computers and AI, but I personally view them as great helpers. I don't want to offload my thinking to AI, but I do want to use it to augment my understanding. I have just started thinking about it, but here are some prompts that I came up with, that I use in [Readwise Reader](https://readwise.io/i/rasul), when reading books: - [Nature of the Book](/nature-of-the-book) - [Unity of the Book](/unity-of-the-book) - [Book Structure Analysis](/analyze-book-structure) The potential is limitless. I'm planning to write more prompt to help me read better. One thing I know for sure is that Mortimer would want me to replace my own reading with AI, since it is similar to reading cliff notes and that means I offload my thoughts and understanding to someone else. If you have any ideas, please let me know. I'm glad I read this book. I feel more prepared for a journey of a lifetime. A journey to better myself through reading great books. This is a book that helped me find the [10 Year Reading Plan](/10-years-of-great-books), by the way. ## Learnings ### There are 4 levels of reading: - Elementary reading: Basic reading comprehension - Inspectional reading: Systematic skimming to get an overview - Analytical reading: Deep, thorough reading for full understanding - Syntopical reading: Reading multiple books on same subject ### Inspectional Reading The purposed of **Inspectional Reading** is to get an overview of the book and decide if deeper reading is needed. - Pre-reading: - Examine the title page and preface to understand the book's scope - Study the table of contents to grasp the book's structure - Check the index for crucial topics and key references - Read the publisher's blurb (especially for expository works) - Look at pivotal chapters' opening/closing summaries - Thumb through the book, reading selected paragraphs - Always read the last few pages, where authors often summarize key points - Superficial reading: - Read the book straight through without stopping for difficult parts - Focus on what you can understand, don't get stuck on challenging sections - Aim to understand what you can (even if it's only 50%) - Avoid consulting footnotes or secondary sources prematurely - Remember: understanding part of a difficult book is better than none at all - Key Principles: - Both steps should be performed quickly - Every book contains both easy and difficult sections - Don't get bogged down in details on the first reading - Save detailed analysis for subsequent readings ### Analytical reading **Analytical Reading** is a deep, thorough reading for full understanding Analytical reading consists of three stages, each with specific rules: #### Rules 1. YOU MUST KNOW WHAT KIND OF BOOK YOU ARE READING, AND YOU SHOULD KNOW THIS AS EARLY IN THE PROCESS AS POSSIBLE, PREFERABLY BEFORE YOU BEGIN TO READ. - Before starting to read, identify the genre and category of the book (like philosophy, science, fiction) as this determines how you should approach reading it. 2. STATE THE UNITY OF THE WHOLE BOOK IN A SINGLE SENTENCE, OR AT MOST A FEW SENTENCES (A SHORT PARAGRAPH). - After reading, you should be able to summarize the book's main point or central theme in one or two sentences, demonstrating your grasp of its essential message. 3. SET FORTH THE MAJOR PARTS OF THE BOOK, AND SHOW HOW THESE ARE ORGANIZED INTO A WHOLE, BY BEING ORDERED TO ONE ANOTHER AND TO THE UNITY OF THE WHOLE. - Identify and understand how the major sections or parts of the book work together to develop the main theme or argument. 4. FIND OUT WHAT THE AUTHOR'S PROBLEMS WERE. - Determine what questions or problems the author is trying to address or solve in writing the book. 5. FIND THE IMPORTANT WORDS AND THROUGH THEM COME TO TERMS WITH THE AUTHOR. - Identify and understand the key terms or words the author uses, especially those that are crucial to understanding their arguments. 6. MARK THE MOST IMPORTANT SENTENCES IN A BOOK AND DISCOVER THE PROPOSITIONS THEY CONTAIN - Find and understand the most significant statements in the book where the author makes their key points or assertions. 7. LOCATE OR CONSTRUCT THE BASIC ARGUMENTS IN THE BOOK BY FINDING THEM IN THE CONNECTION OF SENTENCES. - Identify or piece together the author's arguments by connecting related sentences and passages throughout the book. 8. FIND OUT WHAT THE AUTHOR'S SOLUTIONS ARE. - Understand what solutions or answers the author provides to the problems they identified. 9. YOU MUST BE ABLE TO SAY, WITH REASONABLE CERTAINTY, "I UNDERSTAND," BEFORE YOU CAN SAY ANY ONE OF THE FOLLOWING THINGS: "I AGREE," OR "I DISAGREE," OR "I SUSPEND JUDGMENT." - You must fully understand the author's position before you can legitimately agree, disagree, or reserve judgment. 10. WHEN YOU DISAGREE, DO SO REASONABLY, AND NOT DISPUTATIOUSLY OR CONTENTIOUSLY. - When disagreeing with an author, do so based on reason and logic rather than emotion or the desire to win an argument. 11. RESPECT THE DIFFERENCE BETWEEN KNOWLEDGE AND MERE PERSONAL OPINION BY GIVING REASONS FOR ANY CRITICAL JUDGMENT YOU MAKE. - Support your agreements or disagreements with well-reasoned arguments, distinguishing between factual knowledge and personal opinion. #### STAGE 1: Finding What a Book is About 1. Classify the book according to kind and subject matter 2. State what the whole book is about with utmost brevity 3. Enumerate its major parts in order and relation, and outline these parts 4. Define the problem(s) the author is trying to solve #### STAGE 2: Interpreting the Book's Contents 5. Come to terms with the author by identifying and understanding key words 6. Grasp the author's leading propositions by finding important sentences 7. Know the author's arguments by finding or constructing them from sequences of sentences 8. Determine which problems the author solved and which they did not #### STAGE 3: Criticizing the Book as a Communication of Knowledge General Rules: 9. Don't criticize until you fully understand 10. Don't disagree disputatiously 11. Present good reasons for any critical judgment Specific Criteria for Criticism: 12. Show where the author is uninformed 13. Show where the author is misinformed 14. Show where the author is illogical 15. Show where the author's analysis is incomplete #### Key Points about Analytical Reading: - It requires active engagement with the text - You must first understand before criticizing - The goal is to have an intelligent conversation with the author - It involves asking questions and seeking answers - You should be able to state the book's content in your own words - Critical thinking must be supported by reasons - If you can't show the author is uninformed, misinformed, or illogical, you must agree or suspend judgment ### Syntopical Reading **Syntopical Reading** is the fourth and highest level of reading. This is where you are reading multiple books on same subject. STAGE 1: Surveying the Field (Preparation) 1. Create a tentative bibliography using library catalogs, advisors, and bibliographies in books 2. Inspect all books through inspectional reading to: - Determine which are relevant - Get a clearer idea of the subject - Note: These steps are not strictly chronological but interact with each other STAGE 2: Syntopical Reading Proper 1. Find the Relevant Passages - Don't read books entirely - Focus on finding sections relevant to your problem - Remember you're serving your purpose, not the books' 2. Bring Authors to Terms - Create a neutral terminology - Force authors to use your language, not theirs - Establish common terms that work across all authors 3. Get the Questions Clear - Frame a set of questions that all authors can be seen as answering - Questions might not be explicitly addressed by authors - Questions should help solve your problem 4. Define the Issues - Identify where authors answer same questions differently - Order multiple viewpoints in relation to each other - Classify authors according to their views - Sometimes need to frame questions in ways authors didn't explicitly address 5. Analyze the Discussion - Maintain dialectical objectivity - Present opposing views impartially - Quote authors directly to support interpretations - Order the questions and issues to maximize understanding - Don't aim for final answers but rather understanding the discussion Key Points about Syntopical Reading: - It's the most active form of reading - The goal is not to find definitive answers but to understand the discussion - Requires maintaining objectivity and avoiding bias - Must resist taking sides while trying to see all sides - Fiction and poetry are generally difficult to include in syntopical reading - The reader must be the master of the situation, not the books - Success depends heavily on the initial inspection phase to identify relevant works ### Key Principles 1. **Active Reading** - Reading is like a conversation with the author - You must ask questions while reading - Make notes and annotations - Think critically about content 2. **Understanding Before Criticism** - You must fully understand before agreeing/disagreeing - Avoid being contentious or disputatious - Give reasons for any critical judgments - Recognize difference between knowledge and opinion 3. **Different Types of Reading for Different Materials** - Practical books require different approach than theoretical - Fiction requires imagination and emotional engagement - Scientific works need attention to experimental evidence - Philosophy requires careful attention to arguments and terms 4. **Reading for Growth** - Must read books beyond your current level to improve - Good books reward effort with wisdom and understanding - Reading keeps mind active and growing - Very few books (perhaps 1%) deserve deep analytical reading - Even fewer (<100) are truly inexhaustible and worth rereading 5. **The Importance of Multiple Readings** - Some books reveal more with each reading - Great books grow with the reader - Different levels of understanding possible with repeated readings --- # Gateway to Great Books URL: https://www.rasulkireev.com/gateway-to-great-books/ Type: article Date: 2024-12-07 Description: In this post I'll be listing the works from the "Gateway to Great Books" series that I'll be reading to keep track of my progress. Tags: Reading, Literature, Great Books, Books, Gateway to Great Books, Reading List, Classics, Education, Self-improvement Content: Not too long ago I have [started a 10 year long journey to read great books](/10-years-of-great-books). It's been a pleasant journey thus far. I'm definitely behind on the plan, but that's fine, I've been reading both older ('great') and newer books. I originally came across that plan in the "How to Read a Book" book by [Mortimer Adler](https://en.wikipedia.org/wiki/Mortimer_J._Adler), which I almost finished and am about to write a review on. Well, this time around I noticed there was a reference to another book compilation called "[Gateway to Great Books](https://www.amazon.com/Gateway-Great-Books-10-Set/dp/B000K078GY/ref=sr_1_1)". This is very similar to the "Great Books of the Western World" series, but with works that are simpler/shorter. I thought it would be a good idea to start reading some of them too. So, in this post I will be listing the works I'll be reading to keep track of my progress. As with the 10 Year Reading Plan, I'll be leaving links to the online resources where you can read these books for free, as well as links to the posts where I review/summarize/leave my thoughts on the book. ## Reading List ### Volume 2: Imaginative Literature I - Daniel Defoe, *Excerpts from Robinson Crusoe* - Rudyard Kipling, "Mowgli's Brothers" from *The Jungle Book* - Victor Hugo, "The Battle with the Cannon" from *Ninety-Three* - Guy de Maupassant, "Two Friends" - Ernest Hemingway, "The Killers" from *Men Without Women* - Sir Walter Scott, "The Two Drovers" from *Chronicles of the Canongate* - Joseph Conrad, "Youth" - Voltaire, *Micromégas* - Oscar Wilde, "The Happy Prince" from *The Happy Prince and Other Tales* - Edgar Allan Poe, "The Tell-Tale Heart"; "The Masque of the Red Death" - Robert Louis Stevenson, *The Strange Case of Dr. Jekyll and Mr. Hyde* - Mark Twain (Samuel Clemens), *The Man That Corrupted Hadleyburg* - Charles Dickens, "A Full and Faithful Report of the Memorable Trial of Bardell against Pickwick" from *The Pickwick Papers* - Nikolai Gogol, "The Overcoat" - Samuel Butler, "Customs and Opinions of the Erewhonians" from *Erewhon* - Sherwood Anderson, "I'm a Fool" - Anonymous, *Aucassin and Nicolette* ### Volume 3: Imaginative Literature II - Stephen Crane, "The Open Boat" - Herman Melville, "Billy Budd" - Ivan Bunin, "The Gentleman from San Francisco" - Nathaniel Hawthorne, "Rappaccini's Daughter" - George Eliot, "The Lifted Veil" - Lucius Apuleius, "Cupid and Psyche" from *The Golden Ass* - Ivan Turgenev, "First Love" - Fyodor Dostoevsky, "White Nights" - John Galsworthy, "The Apple-Tree" - Gustave Flaubert, "The Legend of St. Julian the Hospitaller" - F. Scott Fitzgerald, "The Diamond as Big as the Ritz" - Honoré de Balzac, "A Passion in the Desert" - Anton Chekhov, "The Darling" - Isaac Singer, "The Spinoza of Market Street" - Alexander Pushkin, "The Queen of Spades" - D. H. Lawrence, "The Rocking-Horse Winner" - Henry James, "The Pupil" - Thomas Mann, "Mario and the Magician" - Isak Dinesen, "Sorrow-Acre" - Leo Tolstoy, "The Death of Ivan Ilyich"; "The Three Hermits"; "What Men Live By" ### Volume 4: Imaginative Literature III - Molière, *The Misanthrope*, *The Doctor in Spite of Himself* - Richard Brinsley Sheridan, *The School for Scandal* - Henrik Ibsen, *An Enemy of the People* - Anton Chekhov, *The Cherry Orchard* - George Bernard Shaw, *The Man of Destiny* - John Synge, *Riders to the Sea* - Eugene O'Neill, *The Emperor Jones* ### Volume 5: Critical Essays - Virginia Woolf, "How Should One Read a Book?" - Matthew Arnold, "The Study of Poetry"; "Sweetness and Light" - Charles Augustin Sainte-Beuve, "What Is a Classic?"; "Montaigne" - Francis Bacon, "Of Beauty"; "Of Discourse"; "Of Studies" - David Hume, "Of the Standard of Taste" - Arthur Schopenhauer, "On Style"; "On Some Forms of Literature"; "On the Comparative Place of Interest and Beauty in Works of Art" - Friedrich Schiller, "On Simple and Sentimental Poetry" - Percy Bysshe Shelley, "A Defence of Poetry" - Walt Whitman, *Preface to Leaves of Grass* - William Hazlitt, "My First Acquaintance with Poets", "On Swift", "Of Persons One Would Wish to Have Seen" - Charles Lamb, "My First Play", "Dream Children, a Reverie", "Sanity of True Genius" - Samuel Johnson, *Preface to Shakespeare* - Thomas de Quincey, "Literature of Knowledge and Literature of Power", "On the Knocking at the Gate in Macbeth" - T. S. Eliot, "Dante", "Tradition and the Individual Talent" ### Volume 6: Man and Society I - John Stuart Mill, "Childhood and Youth" from *Autobiography* - Mark Twain, "Learning the River" from *Life on the Mississippi* - Jean de La Bruyère, "Characters" from *A Book of Characters* - Thomas Carlyle, "The Hero as King" from *On Heroes, Hero-Worship and the Heroic in History* - Ralph Waldo Emerson, "Thoreau" - Nathaniel Hawthorne, "Sketch of Abraham Lincoln" - Walt Whitman, "Death of Abraham Lincoln" - Virginia Woolf, "The Art of Biography" - Xenophon, "The March to the Sea" from *The Persian Expedition*; "The Character of Socrates" from *Memorabilia* - William H. Prescott, "The Land of Montezuma" from *The Conquest of Mexico* - Haniel Long, "The Power within Us" - Pliny the Younger, "The Eruption of Vesuvius" - Tacitus, "The Life of Gnaeus Julius Agricola" - François Guizot, "Civilization" from *History of Civilization in Europe* - Henry Adams, "The United States in 1800" from *History of the United States of America* - John Bagnell Bury, "Herodotus" from *The Ancient Greek Historians* - Lucian, "The Way to Write History" - Great Documents - The English Bill of Rights - Declaration of the Rights of Man and of the Citizen - The Virginia Declaration of Rights - The Declaration of Independence - Charter of the United Nations - Universal Declaration of Human Rights - Thomas Paine, "A Call to Patriots – December 23, 1776" - George Washington, "Circular Letter to the Governors of All the States on Disbanding the Army"; "The Farewell Address" - Thomas Jefferson, "The Virginia Constitution" from *Notes on the State of Virginia*; "First Inaugural Address"; "Biographical Sketches" - Benjamin Franklin, "A Proposal for Promoting Useful Knowledge among the British Plantations in America", "Proposals Relating to the Education of Youth in Pennsylvania" - Jean de Crevecoeur, "The Making of Americans" from *Letters from an American Farmer* - Alexis de Tocqueville, "Observations on American Life and Government" from *Democracy in America* - Henry David Thoreau, "Civil Disobedience"; "A Plea for Captain John Brown" - Abraham Lincoln, "Address at Cooper Institute"; "First Inaugural Address"; "Letter to Horace Greeley", "Meditation on the Divine Will"; "The Gettysburg Address"; "Second Inaugural Address"; "Last Public Address" ### Volume 7: Man and Society II - Francis Bacon, "Of Youth and Age", "Of Parents and Children", "Of Marriage and Single Life", "Of Great Place", "Of Seditions and Troubles", "Of Custom and Education", "Of Followers and Friends", "Of Usury", "Of Riches" - Jonathan Swift, "Resolutions when I Come to Be Old", "An Essay on Modern Education", "A Meditation upon a Broomstick", "A Modest Proposal for Preventing the Children of Ireland from Being a Burden to Their Parents or Country" - David Hume, "Of Refinement in the Arts"; "Of Money"; "Of the Balance of Trade"; "Of Taxes"; "Of the Study of History" - Plutarch, "Of Bashfulness" - Robert Louis Stevenson, "The Lantern-Bearers" from *Across the Plains* - John Ruskin, "An Idealist's Arraignment of the Age" from *Four Clavigera* - William James, "On a Certain Blindness in Human Beings", "The Energies of Men", "Great Men and Their Environment" - Arthur Schopenhauer, "On Education" - Michael Faraday, "Observations on Mental Education" - Edmund Burke, "Letter to the Sheriffs of Bristol" - John Calhoun, "The Concurrent Majority" - Thomas Babington Macaulay, "Machiavelli" - Voltaire, "English Men and Ideas" from *Letters on the English* - Dante, "On World Government" from *De Monarchia* - Jean-Jacques Rousseau, "A Lasting Peace through the Federation of Europe" - Immanuel Kant, "Perpetual Peace" - Carl von Clausewitz, "What Is War?" from *On War* - Thomas Robert Malthus, "The Principle of Population" from *Population: The First Essay* ### Volume 8: Natural Science - Francis Bacon, "The Sphinx" - John Tyndall, "Michael Faraday" from *Faraday as a Discoverer* - Ève Curie, "The Discovery of Radium" from *Madame Curie* - Charles Darwin, "Autobiography" - Jean-Henri Fabre, "A Laboratory of the Open Fields"; "The Sacred Beetle" - Loren Eiseley, "On Time" - Rachel Carson, "The Sunless Sea" from *The Sea Around Us* - J. B. S. Haldane, "On Being the Right Size" from *Possible Worlds* - Thomas Henry Huxley, "On the Relations of Man to the Lower Animals", "On a Piece of Chalk" - Francis Galton, "The Classification of Human Ability" from *Hereditary Genius* - Claude Bernard, "Experimental Considerations Common to Living Things and Inorganic Bodies" - Ivan Pavlov, "Scientific Study of the So-called Psychical Processes in the Higher Animals" - Friedrich Wöhler, "On the Artificial Production of Urea" - Charles Lyell, "Geological Evolution" from *Principles of Geology* - Galileo, "The Starry Messenger" - Tommaso Campanella, "Arguments for and against Galileo" from *The Defense of Galileo* - Michael Faraday, *The Chemical History of a Candle* - Dmitri Mendeleev, "The Genesis of a Law of Nature" from *The Periodic Law of the Chemical Elements* - Hermann von Helmholtz, "On the Conservation of Force" - Albert Einstein and Leopold Infeld, "The Rise and Decline of Classical Physics" from *The Evolution of Physics* - Arthur Eddington, "The Running-Down of the Universe" from *Nature and the Physical World* - James Jeans, "Beginnings and Endings" from *The Universe Around Us* - Kees Boeke, "Cosmic View" ### Volume 9: Mathematics - Lancelot Hogben, "Mathematics, the Mirror of Civilization" from *Mathematics for the Million* - Andrew Russell Forsyth, "Mathematics, in Life and Thought" - Alfred North Whitehead, "On Mathematical Method" from *An Introduction to Mathematics*, "On the Nature of a Calculus" - Bertrand Russell, "The Study of Mathematics", "Mathematics and the Metaphysicians", "Definition of Number" - Edward Kasner and James R. Newman, "New Names for Old", "Beyond the Googol" - Tobias Dantzig, "Fingerprints", "The Empty Column" - Leonhard Euler, "The Seven Bridges of Königsberg" - Norman Robert Campbell, "Measurement", "Numerical Laws and the Use of Mathematics in Science" - William Clifford, "The Postulates of the Science of Space" - Henri Poincaré, "Space", "Mathematical Creation"; "Chance" - Pierre-Simon Laplace, "Probability" from *A Philosophical Essay on Probabilities* - Charles Sanders Peirce, "The Red and the Black" ### Volume 10: Philosophical Essays - John Erskine, "The Moral Obligation to Be Intelligent" - William Clifford, "The Ethics of Belief" - William James, "The Will to Believe", "The Sentiment of Rationality" - John Dewey, "The Process of Thought" from *How We Think* - Epicurus, "Letter to Herodotus"; "Letter to Menoeceus" - Epictetus, *The Enchiridion* - Walter Pater, "The Art of Life" from *The Renaissance* - Plutarch, "Contentment" - Cicero, "On Friendship"; "On Old Age" - Francis Bacon, "Of Truth"; "Of Death"; "Of Adversity"; "Of Love"; "Of Friendship"; "Of Anger" - George Santayana, "Lucretius"; "Goethe's Faust" - Henry Adams, "St. Thomas Aquinas" from *Mont-Saint-Michel and Chartres* - Voltaire, "The Philosophy of Common Sense" - John Stuart Mill, "Nature" - Ralph Waldo Emerson, "Nature"; "Self-Reliance"; "Montaigne; or, the Skeptic" - William Hazlitt, "On the Feeling of Immortality in Youth" - Thomas Browne, "Immortality" from *Urn-Burial* --- # 10 Years of Great Books URL: https://www.rasulkireev.com/10-years-of-great-books/ Type: article Date: 2022-07-01 Description: I'm starting a 10 Year Reading Plan proposed by Robert Hutchins and Mortimer Adler in their book "The Great Conversation". You should join me so that we can learn together better. Tags: reading, classics, great books Content: import FoldableParagraph from '../../components/FoldableParagraph.vue'; I'm starting a 10 Year Reading Plan proposed in the [1st Volume (The Great Conversation)](/the-great-conversation) of the "Great Books of the Western World" series. This plan is great because it is designed to help increase your chances of consuming and understanding classic works that might feel difficult at first (Aristotle, Thomas Acquinas, Hegel, and others). > [Texts] get more difficult from year to year in two ways. The selections get longer, and they deal with more difficult subject matters. See the reading plan with links [below](#reading-list). Right now I'm reading in isolation, but would love to find a group of people who would join me on this journey. I think the best thing one can do to improve understanding is to discuss it with others. If you would like to join me, email me (me at domain of this site). This is an ongoing project / post, so feel free to follow along and join me at whatever stage of the journey you are at. Would love to talk to similar minded people. ## Great Books About 4 year ago I was reading Mortimer Adler's book "[How to Read a Book](https://www.goodreads.com/book/show/567610.How_to_Read_a_Book?from_search=true&from_srp=true&qid=SEJLp8bb3B&rank=1)", since I wanted to greatly improve how I read. I read a good chunk of the book, but found it a little to dry, so I "dropped" it. Reading it, was not a waste of time, as I learnt quite a bit of things about Analytical reading and [reading in general](/reading-is-good). However, one of the biggest gifts this book has given me is [a list of Recommended Books](https://bathtubbulletin.com/mortimer-adlers-reading-list/) that would go well with the type of reading that Mortimer talked about in the book. This list intrigued me. I thought that it would be very cool to finish such a list, as if some world secret would open up to me. Obviously I don't think that, but I still do think that books from that list could change someone's life for sure. At the time I thought that most of the books were a little difficult for me, to which Mortimer agreed: > All of these books are over most people’s heads—sufficiently so, at any rate, to force most readers to stretch their minds to understand and appreciate them. So I kind of the left the list for some time. Fast forward 3 years, after reading a lot of (**newer**) books, and not making many notes, I decided to change my approach. I started to read more thoughtfully. I started to make more highlights, more annotation, more side notes, using various mediums (Kindle, Book Stickies, Journal, etc.). I also synced all these mediumd into [Readwise](https://readwise.io/) and slowly loading all the notes to my [Zettelkasten](/how-to-take-smart-notes/) using [Obsidian](https://obsidian.md/). I started learning and remebering more from the books I read. Then earlier this year I somehow ran into the book series called the "[Great Books of the Western World](https://en.wikipedia.org/wiki/Great_Books_of_the_Western_World)". I started looking at the contents and realised it is very similar to the one that Mortimer Adler compiled. To my surprise he compiled that one too, with a team from University of Chicago. I thought I'm ready to start reading the old books, the Great Books. I mostly read books on Kindle, but for this, I really wanted to read physical books from the actualy Encyclopædia Britannica publishing. I found the full set printed in 1971 on Ebay for $80, plus $70 for delivery.  When I received them, I was in shock. Some of them felt like they were never opened. That is to say condition of most of them was superb. Now I just have to start reading. ## Reading List Where possible I'll be adding links to online resources where you can [read them for free](/how-to-read-books-for-free). When such resources are available it is highly likely that I'll be leaving thoughts and comments using the [Hypothes.is](https://web.hypothes.is/) Add-on. I encourage you to install it and join the conversation, like the authors of these fantastic books did. ### Year 1
{{ mention.node.wmProperty }}
{{ mention.node.content.text }}
{\{ post.title }\}
{% endfor %} ``` You will now get the list of all the posts. ## Conclusion Before I used a very complicated method to achieve the same result, I honestly don't even want to tell anyone about it. This is a much more straight forward, much more elegant solution. It requires much less additional code written. One thing I felt when I was writing this post is a worry that people are reading this need more context. I think I will end writing a "Definitive guide to start a Django project." That way, in the future, I can always refer to the structure that already exists, as opposed to starting fresh every single time. I hope this was helpful. Thanks for reading. --- # Adding a dictionary to a list of dictionaries in Python URL: https://www.rasulkireev.com/list-of-dicts/ Type: tutorial Date: 2020-02-13 Description: I have encountered a problem where I was not able to append a dictionary to a list. In this post, I will explore this issue and show how to bypass that. Tags: webscraping, dictionaries, python, webscraping Content: In my most recent project, I have encountered a problem where I was not able to append a dictionary to a list using `list_data.append(data_dict).` The result was a list of the same dictionaries. In this post, I will explore this issue and show how to bypass that. ## Setup Just so that we are on the same page, this is my setup. I am parsing a page that has an entry for each day of each month. ```1
blah
2
blah blah
3
blah blah blah
etc...1
blah
2
blah blah
3
blah blah blah
etc...by Rasul
```  You can use this on any website you have built. You can direct users to any link you would like. The cool think about this is that it can also be used as a Feedback button. This is useful because it is always there, users can always see it. Yet, it is not right in your face. You would simply need to change the link and the text. For the link, you can make a TypeForm to collect feedback. ## Final Notes You could combine the two widgets on one page. It will look something like this.  You are a judge on this one. For me, this looks alright. Not great, just alright. Here is the code that will get you those: ```htmlby Rasul
Feedback
``` I hope that is useful. --- # New Project 'Built with Django'! URL: https://www.rasulkireev.com/builtwithdjango/ Type: article Date: 2019-12-12 Description: Launching a new hobby project. I am making a curated list of products built with Django. Tags: webapp, ryankulp, microacquisitions, django Content: Last week, I purchased [Ryan Kulp](https://www.ryanckulp.com/)'s course on buying, improving, and selling microbusinesses [(affiliate link)](https://www.microacquisitions.com/how-to-buy-small-companies/8ayt5). One of the reasons I bought this course was to learn another skill (bseides, data analysis and web developemnt) he help my on a path to become financially independent. The other reason is that I desperately wanted to see how one would purchase a business without having a ton of cash upfront. Finally, I have been following Ryan for a while now, and he is just a cool dude, with [a lot to share](https://www.ryanckulp.com/projects/). This is not a post about this course, though. I will write a short review of the course once I finish it. For now, I want to share a new project I am working on and how I came up with it. The reason I mentioned How to Buy, Grow, and Sell Small Companies is that it helped me to get the idea. In one of the videos, Ryan said that at [Fork Equity](https://www.forkequity.com/)(Ryan's Investment firm), they care about the tech stack that the company uses. They have experience with [Ruby on Rails](https://rubyonrails.org/) and will be able to navigate in the projects once they acquire it quickly. I am a big fan of [Django](https://www.djangoproject.com/) and its [community](https://www.djangoproject.com/community/). If I am ever going to buy a business, I do not want to spend a ton of time learning the tech stack behind it. So I thought it would be cool to have a collection of websites built with Django. Hence my project "[Built with Django](https://builtwithdjango.com/)." This seemed like an excellent idea for several reasons: 1. I get to practice and improve my [Django](/managing-django-with-poetry) & Design skills 2. I get to create a community of like-minded people. More specifically, people who like to create things and like to create them with Django. 3. I have a list of great projects that I could potentially help with or even take under my wing and improve upon. 4. Highlight the brightest mind in the community that I love. 5. In case of success, potentially monetize, by creating a job board and other non-intrusive to users way. The project is now up and running. I published it a week ago. I will not go into more detail about how I was making right now. I will write a post on it later. Here I just want to state that it took me about a week to go from 0 to [MVP](https://en.wikipedia.org/wiki/Minimum_viable_product). The hardest part was the front end, it is my weakness. Otherwise, Django makes it pretty easy to build the backend logic. Love Django. I think this is going to be relatively low maintenance, yet useful project. I hope we get some people sharing their work. Hopefully, this will help grow the awesome community of Django makers. --- # Analyzing FIFA 19 data (III). Machine Learning and Prediction URL: https://www.rasulkireev.com/fifa-machine-learning/ Type: tutorial Date: 2019-12-06 Description: In this post we are going to apply some basic machine learning on our clean dataset. We are going to focus on using Scikit Learn Tags: datascience, machinelearning, fifa, numpy, pandas, python, scikitlearn Content: ## Source code The project source code is in [this](https://github.com/rasulkireev/fifa19-data-analysis) Github repo. You can review the code in this post in 3.1-machine-learning-by-the-book. ##Overview In this post, we go through the process of building a machine learning algorithm. I am not making it from scratch. Scikit-learn has done all the work for us. We need to think about the "business" logic and best practices of using this library. Please note, this is part 3 of our project. Please follow the links to review [Part 1](https://www.rasulkireev.com/fifa-data-cleaning/) and [Part 2](https://www.rasulkireev.com/fifa-data-exploration/), where we talked about Data Cleaning and Exploration, respectively. ## Initial Importing Let's begin. First, we need to import the standard packages and a "clean" dataset (from the previous post). ```python %matplotlib inline # Standard Libraries to import import pandas as pd import matplotlib.pyplot as plt import numpy as np dataset = pd.read_csv('data/processed/clean_dataset.csv', index_col=0) ``` This should get us going. ## Creating a test set. Before we begin any further exploration or analysis, we need to create a test set and set it aside. After you have your data, the first thing you should do is to set aside some test data. This ensures a safe and unbiased process. ### Categorizing Overall Skills into bins. This step helps us get the correct proportions of data from each Overall skill bin when we are splitting the dataset. ```python # Create a column that categorizes Overall Skills level into bins. custom_bins = [i for i in range(45,100,5)] dataset['overall_bins'] = pd.cut(dataset['overall'], bins=custom_bins, labels=[i for i in range(len(custom_bins)-1)]) dataset['overall_bins'].hist() ``` If everything works correctly, you should get a histogram that shows an uneven distribution of players that belongs to each "group."  Let's now split the dataset into the test set and training set. Thanks to Scikit-learn, it is straightforward. We are using the train_test_split function. ```python from sklearn.model_selection import train_test_split strat_train_set, strat_test_set = train_test_split( dataset, test_size=0.2, random_state=42, stratify=dataset["overall_bins"]) ``` Here, we set the test size to 20%, which is the standard proportion to pick. If you have a large data set, with millions of rows, then you can choose a smaller percentage. The random state helps us replicate the result in the future. You can use any integer, but 42 is a geeky standard. > I have procrastinated on this post for a long Time. I think this is just because it seems like there is too much work ahead. I have this subconscious desire to make it perfect, just because all the data science related posts I read seem to be that way. No more. I am at the beginning of my career, and putting this out in the world is way more important than making it perfect. So I try to keep this short, sweet, and simple (the new S3). In the future, when I have more time and experience, you can certainly expect much more detail, depth, and sass in my posts. Now, let's continue. If you want to see the distribution of data along with the bins, you can run the following code. ```python print(strat_test_set["overall_bins"].value_counts()/len(strat_test_set)) print(len(strat_test_set.overall)) ```  ## Prepare the Data for Machine Learning Algorithm ### Separating dependent and independent variables The first thing we are going to do is to separate the dependent and independent variables. Since we are trying to predict the value of the player, it is going to be our dependent variable. Other columns are the independent variables. This is the code to achieve that separation: ```python dataset = strat_train_set.drop("value", axis=1) dataset_labels = strat_train_set["value"].copy() ``` ### Converting categorical variable to numerical We are using Scikit-learn built-in method called OneHotEncoder. This is great and simple to use the feature. _**I have to give Scikit-learn dev team a huge shoutout, they are doing a great job overall.**_ The only categorical variable that we have is 'Position.' I think it is useful to consider player positions because they need different skills and attribute to be better or worse and will, therefore, affect the overall value of the player. ```python # One hot Encoding from sklearn.preprocessing import OneHotEncoder dataset_categorical = dataset[['position']] cat_encoder = OneHotEncoder() dataset_categorical_1hot = cat_encoder.fit_transform(dataset_categorical) ``` ### Scaling your features Scaling is important when it comes to Machine Learning. Having values that vary in the range can through your algorithm off. So keeping everything on the same scale is very important. One way to do this is Scikit Learn's built-in method called StandardScaler. This method applies the [Min-Max feature scaling](https://en.wikipedia.org/wiki/Feature_scaling#Rescaling_(min-max_normalization)) , which essentially yields values from 0 to 1. I use a Pipeline method to apply the scaling. This helps us automate the process in the future by creating a pipeline. This is how the code looks like: ```python from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler num_pipeline = Pipeline([ ('std_scaler', StandardScaler()), ]) ``` ### Creating a Full Pipeline The final step in preparing the data is to create a Full Pipeline that we can use to feed the unprocessed information. In our case, it is the test data that we have prepared in the beginning. To create the full pipeline, once again, you need to use Sciki-learn built-in method called `ColumnTransformer`. It is a relatively new feature. It is very efficient. We are also going to leverage the Pipelines we have created earlier. This is how we do this: ```python from sklearn.compose import ColumnTransformer # Make a dataset with nums only dataset_num = dataset.drop("position", axis=1) num_attribs = list(dataset_num) cat_attribs = ["position"] full_pipeline = ColumnTransformer([ ("num", num_pipeline, num_attribs), ("cat", OneHotEncoder(), cat_attribs), ]) ``` Please note: the third parameter for both functions within ColumnTransfomer are lists of columns that this function applies to. Then we will perform a fit_transform on the dataset: ```python dataset_prepared = full_pipeline.fit_transform(dataset) dataset_prepared.shape ``` `.shape` is here to check the dimensions of the final dataset. This is the result for me `(14516, 59)` ## Applying the Machine Learning Algorithm There is a plethora of different Machine Learning Algorithms that was pre-built by Scikit learn. We are going to use the Random Forest Regressor. It is a robust algorithm. I am not going to go into the details of how it works. There are some excellent resources out there that talk about this in detail. If you followed along and did everything successfully, the following code looks extremely simple to you! ```python from sklearn.ensemble import RandomForestRegressor forest_reg = RandomForestRegressor() forest_reg.fit(dataset_prepared, dataset_labels) ``` That's it. We now need to test the algorithm. One of the simplest ways to do this is to check the Root Mean Squared Error. The following code does not. ```python dataset_predictions = forest_reg.predict(dataset_prepared) forest_mse = mean_squared_error(dataset_labels, dataset_predictions) forest_rmse = np.sqrt(forest_mse) f'RMSE is ${forest_rmse:,.0f}' ``` I get `'RMSE is $374,525`. This means that, on average, the algorithm is only roughly off by $400k, which is not a lot compared to the actual values. We are talking millions here. ### Saving the model Suppose we are happy with our model. Now the right thing to do would be to save it. The easiest way to do this is by using joblib function. It is easily accessible from sklearn.externals. This is how you save the model: ```python from sklearn.externals import joblib joblib.dump(forest_reg, "models/best_model.pkl") ``` Here the forest_reg is the model we want to save and the second parameter `"models/best_model.pkl"` is the path and the name of our new file. You can check the directory to make sure everything saved correctly. ## Evaluating on the test set Now that we have a working algorithm we want to use, it is time to finally test it on the test set to see if it works correctly. We are going to take our test_set and feed it through the pipeline we created earlier. After that, we are going to feed it through the model we have trained. Excuse my "feed-through" language. This is the first thing that comes to mind. ```python final_model = best_model X_test = strat_test_set.drop("value", axis=1) y_test = strat_test_set["value"].copy() X_test_prepared = full_pipeline.transform(X_test) ``` The code above makes the final "prepared file." ```python final_predictions = final_model.predict(X_test_prepared) final_mse = mean_squared_error(y_test, final_predictions) final_rmse = np.sqrt(final_mse) ``` Now we successfully "fed" or dataset thought he model. The last thing to do is to evaluate the error. ```python f'RMSE is ${forest_rmse:,.0f}' ``` `'RMSE is $359,161'` All right! The model performs better on the test set, rather than the training set. This is a little surprising to me. The difference is tiny, so no worries about underfitting. ## Final Thoughts I can't believe this is "over." We have gone through the process of Data Analysis from Data cleaning to Building a Model. There are so many things I have left out, even things I did for this dataset. It is impossible to cover everything in one go. I hope this was at least a little tiny bit useful. There are fantastic books written on these topics. The books that helped me write this post is 'Hands-on Machine Learning with Scikit-Learn, Keras & TensorFlow' by Aurelion Geron. ## Final, final thoughts These are my first baby steps in the world of Machine Learning. These are the first baby steps in the world of Data Science blogging or any blogging for that matter. So, please do not be too harsh. You know what, actually forget it. Please, be harsh. I don't have too much free time, and I want to improve as quickly as possible. So, some constructive criticism would be great. This post took me waaay to long to write. Also, I had big blocks of time in between those writing, so I am afraid of small inconsistencies. In the future, I will try to break it up into a much smaller code block. I guess it was a little too ambitious to write a "form start to finish" post as my first post. Well, I am happy I wrote. I am so glad it is now behind me, and I can move on with some other things. I promise to try to be more consistent and more frequent with posts. --- # Just launched my first Web App! URL: https://www.rasulkireev.com/first-web-app/ Type: article Date: 2019-10-29 Description: Finally launched my first Web App. Kushim is my first Django project which was built from scratch. Tags: webapp, django, saas Content: This is a big thing for me. I have been learning Django for several months now (around 4). I built a website with it, thanks to all the great tutorials out there. Building a Web App is a whole different thing though. I have struggled to find time and courage to actually build this thing. It took many different forms and ideas while I was building it. ## Gratitude I want to give a quick shout-out to people/resources that helped me achieve this. I'd like to thank: * my wife for putting up with me during this long and hard process! * the StackOverflow community (especially to [Daniel Roseman](https://stackoverflow.com/users/104349/daniel-roseman?tab=profile) who answers a ton of questions and very quickly I have to say). * [William Vincent](https://wsvincent.com/) for writing a lot of good tutorials. * [IndieHackers Community](https://www.indiehackers.com/) for constant inspiration. * [Coutland Allen](https://www.indiehackers.com/csallen) for building Indiehackers and for the podcast, which is extremely inspirational. * ... This list can drag along pretty far. The point is I am thankful to all the people who helped me with this. Funny enough, none of those people know they have helped me. ## The Process I wanted to build something. Anything, not necessarily a web app. ``` Note: While writing this I feel so shitty for some reason... "Who are you to be writing about this?", "No one cares..." are the thought that comes to my head... ``` I needed some extra money to live off, since my current wage is not enough. This leads me to try a bunch of things. * I tried to build a t-shirt shop with Shopify, that failed. * I tried to build a website with Wordpress to sell some written work. That failed too. * I tried to record myself cooking to make a Youtube channel, I didn't follow through. * I made a business newsletter for Russian Entrepreneurs. No, signups. * I made an online journal so that students can post their work for the world to see. No submissions... I was kind of sad and decided to do something that will at least help me get a better job. The first thing was to make a website. I tried, Wix.com, Jekyll, plain HTML, it was all shiiiiiiiit. Really, really bad... **This is turning into my life story, which it is not supposed to be. I will stop now and will continue this story sometime in the future, promise.** Long story short, I decided to learn Django and after making the website I was happy about I decided to build some kind of SaaS product that people would pay for. One of the ideas was inspired by Derek Sivers. More specifically, by hist post on [Journaling](https://sivers.org/dj). There he talked about the benefits of journaling. > If you care about your thoughts, keep them. One of the ideas was to also have "Thought On" Journals, for all the different thought you might have. For example, Derek has Journals about Airports, Sex, Travel and a bunch of others. I thought that was a great idea for a web app. Allow people to create journals for any thought that they have. That's it. That was the premise of the app and I have now built it. Now you can do that. Building it was not very hard with the knowledge I gathered in roughly 3 months of building my personal website. The hardest thing was to actually start building it, finding time to continue building it and to have the balls to follow through and finish building it. Somehow, I managed to do all that and am still pleasantly surprised that I did. Just as a remark I want to add that it wasn't super easy all the time, I ran into errors all the time. All. The. Time. You just need to be an adult and seek help. StackOverflow is a great place to ask for help. ## Pricing and Next Steps I thought that this is not enough to ask people for money and so I decided to make it free until I build the next feature. The next feature will be akin to a Personal CRM like [MonicaHQ](https://www.monicahq.com/). I think the price I will be asking for is around 4.99 a month. I won't be expecting much excitement or registration at that price point. If someone signs up I will be super happy, otherwise, I will be happy just using it myself. ## Final Thought Just because this is the first post about me building something, I wanted to tell a lot more, but it is very easy to go down the rabbit hole of telling you each small detail about my thought process and all the vents that happened to me before I actually published. Life is a hard and complicated thing. It is very hard to isolate specific events that lead to other events. Nothing happens in a vacuum. Hopefully, if I continue to work and write about it, I won't have to talk about the details so much and a lot of things will start to become self-evident. --- # PyGotham 2019: Day 2 URL: https://www.rasulkireev.com/pygotham-day-two/ Type: article Date: 2019-10-15 Description: Second Day of my first conference ever. I tried to make good notes during the talks I attended. Tags: conference, networking, pygotham, talks Content: Day 2 of the PyGotham conference was on Saturday. I expected there to be way more people, but surprisingly, the opposite has happened. Day 2 count was twice as small, or at least that is how it felt. Below are the note from Day 2. You can see [Day 1 notes](/pygotham-day-one) _Please note: I took some pictures, but am not able to upload that as of this second. As soon as I can, I will updateCreated the post._ _Please note: I took some pictures, but am not able to upload that as of this second. As soon as I can, I will updateCreated the post._ *** # 1000x faster data manipulation: vectorizing with Pandas and Numpy ## Nathan Cheever @AdvancedMD Ds * For loop vs vectorization * Vectorization working with array or series without for loops, rather all at once. * You are probably already doing that to some degree * To perform conditional vectorization do: **numpy.where()** * Numpy.vectorize() * Numpy.select() for multiple ifs / elifs * Pd.shift() to create anoer plumn with values shofted * talked about Dask * Kubernetes shirt *** # Using Dash to Create Interactive Web Apps for Non Technical Audience ## [Joseph Willi](https://www.linkedin.com/in/joseph-willi-38b7883b/), @[underwriters labarotory](https://www.ul.com/) ### AZV Dashboard (Arizona Vortex) * Great company, mission oriented * Their job is to fire staff and gather data * Somehow connected physical devices such that the plotly days gathers data from the device and inputs it to the dashboard *** # Distributed Machine Learning with Python ## [Brad Miro](http://https://www.linkedin.com/in/brad-miro/) @google * Latest ml updateCreateds,: Gpu, Tensorflow unit * Latest ml updateCreateds,: Gpu, Tensorflow unit * Kubeflow, marries Tensorflow and Kubernetes *** # Pull Requests: Merging good practices into your project ## [Luca Bezerra](mailto:lucabezerra@gmail.com) - vinta * Code review , even if unwanted adds greatly to the project * Best practices: * Pull request template.md on github * Status checks prevent branches merging without checks * Contributing .md for collaboration * Enforce approval/merge rules : codeowners.nd * Using **gitflow** makes sure your branches are always up to dateCreated * Using **gitflow** makes sure your branches are always up to dateCreated * Branches are cheap and great flexibility * Keep pr size as small as possible * More clear commit messages (talk about what and how ), * Use linters when possible * Tips & tools * Refined GitHub * Deploy Previews (Netlify) * Check Vinta checklist *** # Jane Doe will help you improve your project ## Rebecca Sarai - Vinta * Netflix prizes - challenge * Talk is about anonimization * Psedonymization - is personal data , but you hide the data in a particular manner , includes * Tokenization, etc. * Anonimization no data that considered personal and can be sued to identify a person * Static * Dynamic * Synthetic *** # The Cat's Alive! Add Some Weirdness To Your Code With Quantum Computing ## Jorn Mossel, Marianne Hoogeveen * Classical computer works with 0 and 1 * Qubit can be a bit of both (circular form) *** # Oh, the Humanities! Interdisciplinary Thinking in Python ## [Lisa Tagliaferri](https://lisatagliaferri.org) - wrote tutorials for Digital Ocean * Research on how women men are described in certain ages. * Text from Gutenberg projects were analyzed * Very interesting * Text analysis might not be that scary after all. It never was , bit now it is certainly interesting enough to give it a try * Gender novels project * [Caterina.io](https://Caterina.io) * [Hacktober fest](https://hacktoberfest.digitalocean.com/) *** # Serverless Deep Learning with Python ## [Alizishaan Khatri](https://www.linkedin.com/in/alizishaan-khatri-32a20637/) @Kony Machine Learning Engineer * Kony builds applications for banks * Unfortunately I do not follow at all *** # Airflow in Practice: How I Learned to Stop Worrying and Love DAGs ## [Sarah Schattschneider](https://www.linkedin.com/in/sarahschattschneider/) - software engineer @[blue apron](https://www.blueapron.com/) - hiring * One of advantages is the more advanced alerting system * Good cli and UI * Open Sourced by Airbnb --- # PyGotham 2019: Day 1 URL: https://www.rasulkireev.com/pygotham-day-one/ Type: article Date: 2019-10-05 Description: First Day of my first conference. I tried to make good notes during the talks I attended. Tags: conference, networking, pygotham, talks Content: This is a first conference I have ever attended. If I had to describe it in one word, it would be 'great'. Here is why: * I've met a lot of people with similar interest personality types, which is hard to do in regular setting. * I've made a number of "useful" contacts that might help me find a good job. * I've seen a lot of interesting presentations that have sparked my interest in programming (in Python) even more. During the event I took notes with [Joplin](https://joplinapp.org/) , which is a great open-source note-taking app. I strongly recommended to everyone. **Not a sponsor**. The general structure of the notes you are about to read is the same: # Name of the talk ## Author * Notes are going to be bullet points. `If i have any notes above the bullet point above, I will leave them in this grey {code} block` * I will try to leave find as links as possible, so you don't have to google everything. So, without further ado, here are the notes I've taken during the first day of the event. *** # Python use spectrum ## Kojo Idrissa * More speakers always needed. `This makes me want to make a talk to present at one of the conferences, seems totally doable and great for portfolio.` * Volunteers always needed `Certainly feel I should have been volunteering at this event. Will try to consider volunteering much more often` * [Defna.org](http://Defna.org) - Django organization *** # Eita! Why internalization and localization matter ## Nicolle Cysneiros [@Labcodes](https://labcodes.com.br/) - (Web Design Agency whos tech stack is python, django and js) ### Differences in formats across countries * Date Formats (mm/dd/yyy vs. dd/mm/yyyy, etc) * Number Formats (123,123 vs 123.123) * Currency, [Bidirectional Text](https://en.wikipedia.org/wiki/Bidirectional_Text) & [Unicode Characters](https://www.rapidtables.com/code/text/unicode-characters.html) differ from country to country. ### Python library to deal with that * GNU [`gettext`](https://www.gnu.org/software/gettext/) * This piece of software essentially is helping you to create a 'list' of text blocks that will need to be translated. * [`locale`](https://docs.python.org/3.7/library/locale.html) module. * This module helps change the formats of the above mentioned differences. * Apparently Django makes it super easy. *** # Can you keep a secret? ## [Aaron Bassett](https://www.gitshowcase.com/aaronbassett) @[Nexmo](https://www.nexmo.com/) * [Git-Secret](https://git-secret.io/) * Uses [pgp](https://en.wikipedia.org/wiki/Pretty_Good_Privacy) *** # Absolutely Awesome Automated APIs ## [Timothy Allen](https://www.linkedin.com/in/flipperpa/) - @[WRDS](https://wrds-web.wharton.upenn.edu/wrds/index.cfm?) (uses Django) ### -@flipperpa -djangonaut -hockey_fan_flyers -guitarist -loves_icecream * WRDS developed and open sourced [Automagic-Rest](https://pypi.org/project/automagic-rest/) * [Drf renderer xlsx](https://github.com/wharton/drf-renderer-xlsx) - open source library to convert API endpoint to excel file *** # Recreating "The Clock" with Machine Learning and Web Scraping ## [Kirk Kaiser](https://www.linkedin.com/in/k-p-kaiser-94500124/) @[datadog](https://www.datadoghq.com/product/) * [Tate modern - the clock](https://www.tate.org.uk/whats-on/tate-modern/exhibition/christian-marclay-clock) * To start, simplify: try kubernetes locally - Ubuntu + Nvidia, [ngc.nvidia.com](https://ngc.nvidia.com) * [Dab & t-pose controlling light](https://github.com/burningion/dab-and-tpose-controlled-lights) * [Jetson nano gpu accelerated machine 99$](https://amzn.to/2oyUSsS) * Datadog is hiring *** # To comment or not? A data-driven look at attitudes toward code comments ## [Veronica Hanus](https://www.linkedin.com/in/veronicahanus/) * Funny, good presenter * The general consensus is that comments are good and you should leave them *** # Learning with Limited Labeled Data ## Shioulin Sam @cloudera * Very clear and great presenter * **Active learning** has been here for a while, but only now got integrated with ... * Random sample data points to label (good, but not optimal) * [Margin Sampling](https://link.springer.com/chapter/10.1007/978-3-662-45646-0_13) * [activelearner.fastforwardlabs.com](https://activelearner.fastforwardlabs.com) * [Twiml and Ai podcast](https://twimlai.com/) *** # Introduction to Generative Adversarial Networks (GANs): hands-on to making new data (and some pretty pictures) ## [Nabeel Seedat](http://nabeelseedat.com/) * [Dirpfakes](https://twitter.com/realderpfakes?lang=en) * [Deep Convolutional GAN](https://medium.com/@jonathan_hui/gan-dcgan-deep-convolutional-generative-adversarial-networks-df855c438f) * [Fashion Mnist](https://github.com/zalandoresearch/fashion-mnist) * [Gan Zoo](https://github.com/hindupuravinash/the-gan-zoo) *** # What physics can teach us about learning ## [Marianne Hoogeveen](https://www.linkedin.com/in/marianne-hoogeveen/) * Neutral network can approximate any smooth function - [Universal approximation function](https://en.wikipedia.org/wiki/Universal_approximation_theorem) * Scales matter when it comes to identifying patterns (neural networks) - [renormalization group](https://en.wikipedia.org/wiki/Renormalization_group) i.e. compression *** # Django + ElasticSearch without invalidation logic ## [Flávio Juvenal](https://twitter.com/flaviojuvenal?lang=en) @[vinta](https://www.vinta.com.br/) * Most popular search engine * Why use search engine * Tokenization * Fuzzy similarity * Cleaning * Elastic search built ins * Less than million rows of Data can be searched with postgres built-in capabilities (check Django postgres search ) if more than 1m than implement elastic search * [Haystack library](Haystack library) for search in Django * [Zombodb](https://github.com/zombodb/zombodb) works with postgres (via access method API) (Django-zombodb) * will Soon work with postgres 11 *** # Static Typing in Python ## [Dustin Ingram](https://dustingram.com/) @Google @di_codes * type errors happen * When Python expects a list received a string and converts that to a list , ugly list * Python originally is dynamically typed, but can also be static. Which is a great strength * Pep 3107 fucntions * Def Foo() <- max(2,9) * Foo.__annotations * [Mypy](http://www.mypy-lang.org/) from PhD introduced on pycon us 2013 * Experimental variant of Python that is statically typed * After talking to Guido decided to implement to pure Python * pep 483 theory of type hints * Optional typing (+gradual typing) * Variable annotation * Check data science from scratch again, it has some static type instructions * Pep 484 type hints * `Pip install mypy` * When not to use : never * When to use : as much as possible (Start early) * When code is confusing * When for public consumption * Before big migrations and refactoring * Start early * Note : not a replacement for unit test *** # Convincing an entire engineering org to use (and like) mypy ## [Annie Cook](https://www.linkedin.com/in/annielcook/) @[nylas](https://www.nylas.com/) - hiring * [Mypy](http://www.mypy-lang.org/) is a static typechecker , type of documention (self documenting ) ```python #pep 484type hints Def Foo(type: str) -> str Return ``` * With mypy linters work better * Captures a large category of errors * Union is a multiple type * _learn x in y minutes_ . Saw some guy in the talk use this website, seemed interesting *** # ministry of silly talks ## [in-toto](https://www.In-toto.io) - securing the whole software supply chain ### nyu , njit, Santiago Torres Aria's, Hammad Afzali, etc. * Not rely clear, probably hard to implement * Sounds scary where people can attack software, need to check if that actually happens ## Test your failures with xfail ### [Paul Ganssle](https://ganssle.io/) * Decorate a test that you expect to fail with `@pytest.mark.xtest` ## Experimental features in [Scikit-Learn](https://scikit-learn.org/) ### [Thomas J Fan](https://www.linkedin.com/in/thomasjpfan/) - scikit learn core devoler * Deprecations? * Use columntrasformer to transformer some of the dataframe ## Why your tech company from recruit from philosophy department ### [Katherine Hartling](http://www.katbelle.com/) - @KatOnceSaid * [Jackpocket.com](https://jackpocket.com/) * [Plato's concept of classes](https://oregonstate.edu/instruct/phl201/modules/Philosophers/Plato/plato_on_women_in_the_ideal_state_part_I_the_context.html) ## Greed an homage ### Julian, @[julian](https://github.com/Julian) - GitHub, @[julianwastaken](https://twitter.com/julianwastaken?lang=en) on Twitter * Algortim of change in supermarket, greedy algorithm * when does it work * When you can take Independent choices within each step * [Matroids](https://en.wikipedia.org/wiki/Matroid) ## Change just one thing ### Timothy Allen , same guy as WRDS talk in API * Dealed with alcohol addiction problem! * Ask help, people are willing to help, especially the Python and Django communities ## Structured logging in Python ### [Jonathan Meier](https://jonathanmeier.io/) software engineer @[openslate](https://www.openslate.com/) * Structured logging is writing consistent logs that are easy for computers to read (JSON) * [Python-json-logger](https://github.com/madzak/python-json-logger) or structlog ## Restructuring Data in Python ### Mahmoud Hashemi @ sedimental.org * Flat is good vs namespaces are good. Tim Peters - Pep20 * Nested data is bad. Tim Peters * [Glom library](https://glom.readthedocs.io/en/latest/) - Python data nester * Good presenter. ## Ministry of silly runtime: Vintage Python on cloud run ### Dustin Ingram @Google @di_codes * Run stateless http container * Docker images as a service * Installed old Python (1.0.1) on cloud run * Good presenter --- # Analyzing FIFA 19 data (II). Data Exploration and Visualization URL: https://www.rasulkireev.com/fifa-data-exploration/ Type: tutorial Date: 2019-09-26 Description: My thoughts on the Open Source community and the culture behind it. Tags: opensource, plotly, pandas Content: You can find all the code to this project [here](https://github.com/rasulkireev/fifa19-data-analysis). You can review the code in this post in [2.0-plotting-and-exploration.ipynb](https://github.com/rasulkireev/fifa19-data-analysis/blob/master/2.0-plotting-and-exploration.ipynb). In this post I will go through the process of data exploration. In [part 1](https://www.rasulkireev.com/fifa-data-cleaning) we already did some "exploration and are now much more familiar with the dataset. In this part I will mostly focus on visualizations. To be more specific, I will focus on visalizing our data set with a python library - ["Plotly"](https://plot.ly/python/). Before we continue I just wanted to quickly explain why I will be using Plotly, instead of matplotlib or seaborn. 1. Plotly graphs and charts look really good, even without a lot of customization. 2. There are some useful features taht will allow me to explore the dataset (for example, I can zoom in on the chart interactively). 3. We can later make a ['Dash'](https://plot.ly/dash/) dashboard, which uses plotly for all its graphs. ## Installation If you are using anaconda, you have it pre installed. If you are using your own virtual environment then install simply with ```python pip install plotly ``` I strongly suggest you use [jupyter notebook](https://jupyter.org/) for all the analysis and exploration. Again if you are using Anaconda environemnt, you have it pre-installed and simply need to launch jupyter notebooks from the Anaconda Navigator, which is a programm you can run on your computer. If you decided not to use Anaconda than you can easily install jupyter notebooks simply following the official [installation guide](https://jupyter.org/install). Plotly should be working fine with Jupyter Notebooks, right out of the box, but if you are running into some errors, try installing ipywidgets using pip, and generaly going throught the plotly jupiter lab [integration guide](https://plot.ly/python/getting-started/). ## Importing packages Since we are not working with matplotlib or seaborn, we only need to import a couple packages: ``` python import pandas as pd import plotly.graph_objects as go import plotly.express as px ``` * we need pandas beacuse we are wroking with a dataframe * plotly.express is good for quick plots that don't require any customization * plotly.graph_objects allow for full customization Finally, before we begin let's import the dataset we made in the previous post. Please make sure you are wokring in the same directory as you csv file. ```python combined_columns_data = pd.read_csv('reduced_clean_data.csv', index_col=0) ``` ## Correlations using `scatter matrix` ### Basic Player Info (Height, Weight, Overall, Value, Wage) One of the first things we want to look at is something called a scatter matrix. This chart will allow us to compare a bunch of variables (columns) to each other to see if there are any interesting relationships going on in our data. With plotly express it is pretty simple to do. ``` python fig = px.scatter_matrix(combined_columns_data, dimensions=['height','weight','age','value','overall','wage'], color="position") fig.show() ``` As you can see in the code above, we called plotly express graph called `scatter_matrix`, told it what data we want to use (`combined_columns_data` dataframe), specified which variables we are interested in and I also decided to add a color distinction for each positionm so that we could see if there are any clusters. Here is the output:  Nice. Now let's see if there is anything interesting to note. Here are my observtions (if you see something I missed, please [let me know](mailto:kireevr1996@gmail.com)): 1. _(column 2, row 3)_ The value of the player is roughly the same when the Overall Rating is between 0-80. Once the rating passes the 80 mark, the value starts to climb up quickly. 2. _(column 2, row 4)_ Same thing happens to wage. 3. _(columns 5 & 6, row 4)_ These resemble normal distribution plots. This makes sense, since height and weight tend to be normally distributed across any population. what is interesting is that Most valuable or highly paid players tend to be closer to the mean. 4. Finally, as we can expect there is a correlation betweem height and weight. The tallker the playeer, the more he weighs. Let's continue. ### Detailed PLayer Statistics - (Speed, Passing, Physical, Control, Defending, Skill, Shooting) Now let's look at the variables we prepared in the previous part. I want to see id there is any correlation between skills. Currently I expect that there is in fact strong correlation between most skills like, control, shooting, passing, generally because better player will have all detailed stats higher than p[layers that are worse overall. However, specific skills like Defending and Goalkeeping will not be correlated with the rest, since they are very specific. For example, any Goalkeeper will have much higher "Goalkeeping" rating than any other position, conversly he will have much lower Speed or Control compared to other positions. As in the previous example we first create a graph using the express tool. Then we ask to display it with `.show()`: ```python fig_two = px.scatter_matrix(combined_columns_data, dimensions=['speed','passing','physical','control','defending','skill', 'shooting'], color="position") fig_two.show() ``` Here is the result:  As expected, Goalkeepers (the purple color) are a separate group in all GK graphs. Additionally, LB, RB, and CB all form a cluster on the "Defending" graphs. These detailed variables will be useful to differentiate between the group pf people whos overall is around 70 (mean), which is the most dense area. ## Visualizing key metrics The main features of our data is the value and skill. Let's see how one affects the other a little closer. Again, plotly let's us do that pretty simply: ```python fig = px.scatter(combined_columns_data, y="value", x="overall", color="age") fig.show() ```  Interestingly, the relationship is exponential and we will probably have to use a polynomial model in the Machine Learning part of the project. > Note: I should have separated the dataset into test set and training set before starting the exploration. You should too. We will see how to split your data in the next part. In the chart above we are displaying 3 metrics: Player Value, Overall Skill Level and Age (color). This is great, we can see that the bottom corner is more of a yellow color which tells us that player of the same level but different skill level have different value, with older being less value, which makes sense. We can try to add another metric: size, by adding a `size` method. ```python fig = px.scatter(combined_columns_data, y="value", x="overall", color="age", size="skill moves") fig.show() ``` This does not add any value to the graph as it becomes overloaded with information. Keeping charts simple and easy to read is very important. ## Bonus: Working with separate "Positions" Now that we looked at the dataset from a high level, let's take a closer look. My experience with FIFA tells me that each position has its own strengths and weaknesses when it comes to skills, which is why I decided to break down our data into chunks for each position (GK, CB, ST, etc.). One way to do that would be to import all the different csv files we made and make a dataframe for each of them. This is too much writing and too costly for the computer, memore-wise. Instead I will make a function that will create a dataframe on the fly, depending on the position we want. Here are the steps I have in mind: 1. Create a list of unique names. 2. Create a DataFrame dictionary to store key:value pair of future dataframes, i.e. {"GK":pd.Dataframe}) 3. Iterate over the keys in the dictionary to create dataframes with a name DataFrameDict[key], i.e. DataFrameDict["GK"] ```python #create unique list of names UniqueNames = combined_columns_data.position.unique() #create a data frame dictionary to store your data frames DataFrameDict = {elem : pd.DataFrame for elem in UniqueNames} for key in DataFrameDict.keys(): DataFrameDict[key] = combined_columns_data[:][combined_columns_data.position == key] ``` With this in place you can perform all of the above visualizations, but only for a position you want. For example, instead of doing ```python fig = px.scatter(combined_columns_data, y="value", x="overall", color="age") fig.show() ``` you will now do ```python fig = px.scatter(DataFrameDict["GK"], y="value", x="overall", color="age") fig.show() ``` This will output a graph with only Goalkeepers as data points. ## Conclusion In this post we explored the data exploration with Plotly. Plotly is great and powerful tool making some of visualizations very quick and easy. Let me be clear, I do not discard other tools like Matplotlib, the father/mother of all visualizations in Python, Bokeh and others. They do have some advantageous and disadvantageous. Plotly takes care of a lot of functionality for you which might be useful for you data exploration project. We only looked at plotly express package, which is extremely easy to use, but doesn't offer much customization. If you do require some more formatting [plotly go](https://plot.ly/python/) should be used. In the next post we will look into Scikit-learn and will build a model to predict the value of the player. If you have any questions or comments, please email me at [me@rasulkireev.com](mailto:me@rasulkireev.com). --- # Setting up Python virtual environment (for a Django Project) URL: https://www.rasulkireev.com/django-venv/ Type: tutorial Date: 2019-08-29 Description: How to set up a virtual environment for your Django Project, or any other Python project, for that matter. Tags: virtualenvironment, python, django, project, venv Content: For this tutorial I will assume you have a little experience working with the command line tools like "Terminal". If you don't I promise to make a post or two about that, meanwhile you can check those two out: * [Mac](https://www.dummies.com/computers/macs/mac-operating-systems/how-to-use-basic-unix-commands-to-work-in-terminal-on-your-mac/) * [Windows](https://www.cs.princeton.edu/courses/archive/spr05/cos126/cmd-prompt.html) ## Setting up the environment _The first steps is here for people who don't yet have a folder where they keep all their projects._ ### 1. In the Terminal or Command Prompt (cmd) create a directory (folder) where you will keep your projects and websites. ``` mkdir sites cd sites ``` `mkdir` will create a new directory and `cd` will move into into that directory. You can call your folder whatever you want. ### 2. Creating a project folder Once in the `sites` directory you will need run `mkdir` again to make a folder specifically for your project ``` mkdir {projectname} cd {projectname} ``` ### 3. Setting up the environment Before we initiate a django project we need to setup a python virtual environment. This will make sure that whatever machine we are working with (Mac vs. Windows, for example) the website will work by setting up the same packages and libraries. _Generally, having a virtual environment for each one of your projects, whether Web Dev, Data Science or General Programming, is now a standard. For one, this allows other people to help you with you projects and generally makes eveything easier in the future._ For this step you need to have Python installed. I am not going to go over the installation process and will assume you have a working version of Python 3.6 or above. To create a virtual environment python has a built-in package `venv`. ```python # If you have multiple python versions on you computer python3 -m venv venv # If you have python 3.6+ installed only python -m venv venv ``` Here the first `venv` refers to the program we are running. The second `venv` is referring to the name I gave my virtual environment. So, instead of a second `venv` you can type in whatever you want. I find the word venv pretty easy to rememeber and to type up, so that's how I usually call my virtual environments. Let the prgoram run. Congrats you now have created a virtual environment! You can check that everything worked by checking the contents of the folder. You can do that by navigating in `Finder` or `Windows Explorer` or even better just by typing `ls` to the command prompt, this will list out all the directories in your project folder. All there is left to do is to activate the environment to start the working process. On Mac to activate and deactivate the virtual environment you would use the following command: ``` # to activate source venv/bin/activate # to deactivate deactivate ``` On Windows: ``` # to activate .\venv\scripts\activate.bat # to deactivate deactivate ``` When your virtual environemnt is active you will see the name of the virtual environment within bracket to the left of the command line. Like so:  ### 4. Create a Django project Finally, we can create the project. Once you make sure your venv is activated, all you have to do is: ```python # to install django within your virtual environment pip install django # to actually create a project django-admin startproject {name of your peroject} . ``` Note the **dot** in the end of the command. You actually need to add it too. This will make sure that the project is created within the directory you have already created. One last step: ```python python manage.py runserver ``` This will start server with your Django project, If you go to [http://127.0.0.1:8000](http://127.0.0.1:8000) in your browser, you will see a welcome to Django screen. **Congrats!** You can now develop your site with Django freely, which is a whole another topic of discussion. If you have any questions please let me know at one of the social links on the top left. --- # First Javascript Experience URL: https://www.rasulkireev.com/first-javascript-experience/ Type: tutorial Date: 2019-08-28 Description: Sharing my first epxerience with Javascript. Had to add some action to my new web app. Tags: webapp, javascript, html Content: I have been reading a [JavaScript book](https://amzn.to/2KPIsoQ) for a couple of months now... I didn't learn much, unfortunately. I know this is becasue all reading need to be supplemented with some sorts of exercise, preferrably real world projects. Luckily, I have an idea for a project that will require some JavaSript. So, instead of reading a book, I will start by formulating an idea and Googling it (or rather StackOverflowing it). In this post I will go over my first (baby) steps in JavaScript. As far as I understand you can either write some JavaScrip (JS) directly in the html code, like so (the example is from [W3Schoools](https://www.w3schools.com/js/default.asp): ```