Month: September 2025

  • Is Your Parenting Style Too Controlling 14 Behaviors to Watch Out For

    Is Your Parenting Style Too Controlling 14 Behaviors to Watch Out For

    Do you ever wonder if your parenting style might be veering into the realm of control rather than guidance? In today’s fast-paced world, parents often feel pressured to ensure their children succeed at all costs. However, too much power can stifle a child’s ability to grow into an independent, confident individual. Striking the right balance between support and freedom is crucial for their emotional and mental well-being.

    Children flourish when given the space to explore, make mistakes, and learn from them. Overbearing parenting, even when well-intentioned, can hinder their natural development and foster feelings of anxiety or resentment. It’s essential to reflect on whether your involvement is empowering or overshadowing their personal growth. Parenting expert Dr. Laura Markham suggests, “Control is the enemy of connection,” emphasizing the importance of a nurturing yet flexible approach.

    This blog post will help you recognize the subtle signs that your parenting style might be too controlling. From over-scheduling their time to valuing success above all else, we’ll explore common behaviors that can be detrimental to your child’s emotional development. Understanding these signs is the first step toward fostering a healthier, more balanced relationship with your children.

    1-
    MySmile Teeth Whitening Powder for Tooth Whitening, Toothpaste Natural Powder Teeth Whitener, Enamel Safe Whitening Tooth Cleaning Powder, Tooth Stain Remover and Polisher, Fresh Mint

    1. You Plan Every Single Second of Their Time

    If your child’s day is filled from dawn to dusk with activities you’ve meticulously planned, you may be limiting their ability to develop independence. While structure is important, children also need time to relax, explore their interests, and make decisions on their own. Over-scheduling not only curbs creativity but also puts unnecessary pressure on kids to constantly perform. Children who don’t experience downtime may become anxious and burnt out, missing out on essential life skills such as problem-solving and self-regulation.

    Renowned child psychologist Dr. David Elkind warns that “childhood is not a race,” and children who are pushed too hard can end up feeling trapped by expectations. Allowing them moments of unstructured time fosters independence and lets them develop at their own pace. So, instead of filling every second, let your child lead the way sometimes—whether that’s through quiet play, exploration, or simply doing nothing. This will build their confidence in making decisions for themselves.

    2-
    The World’s Favorite Ghost Stories: Ghastly Ghosts, Spooky Spirits, and Other Creepy Tales

    2. You Value Success Over Everything

    Constantly pushing your child to excel in every area of life may send the message that their worth is tied to their achievements. While it’s natural to want your child to succeed, an overemphasis on accomplishment can rob them of the joy of simply participating. Children need the freedom to fail without fearing disapproval or rejection. By focusing solely on success, you risk creating a perfectionist mindset, where the fear of failure overshadows the excitement of learning and growing.

    Research by Carol Dweck, a Stanford psychologist and author of Mindset: The New Psychology of Success, highlights the importance of encouraging a “growth mindset” in children. This approach values effort and resilience over the outcome, helping kids develop a healthier relationship with challenges. Rather than pushing for perfect results, focus on the process—applaud their perseverance, curiosity, and willingness to try new things. This balanced perspective will help them approach life’s hurdles with confidence, knowing that success is not the only measure of worth.

    3-
    purple tree Post-Celebration Wellness Vitamins | Liver Support, Rapid Hydration, Body Replenisher | Dihydromyricetin DHM, Milk Thistle, Electrolytes, Vitamin B, Willow Bark, Quercetin (30 Pills)

    3. You Don’t Allow Them Any Privacy

    Privacy is a crucial aspect of growing up, and constantly monitoring your child’s every move can lead to distrust and rebellion. While safety is, of course, important, children also need personal space to develop their identity and autonomy. Constant surveillance—whether it’s checking their phone without consent or intruding on their social life—can erode the trust necessary for open communication. As children grow, they need to feel that their boundaries are respected so they can develop a sense of responsibility and independence.

    According to Dr. Lisa Damour, author of Untangled: Guiding Teenage Girls Through the Seven Transitions into Adulthood, respecting a child’s privacy is critical to fostering mutual respect. Over-involvement in their private life can prevent them from feeling comfortable sharing their thoughts and concerns. Instead of micromanaging, create an environment where they feel safe discussing their problems with you voluntarily. By doing so, you build a stronger relationship rooted in trust rather than control.

    4-
    Arshiner Boys Casual Short Sleeve Button Down Shirt Collared Beach Shirt Size 3-12 Years Old

    4. You Make All Their Choices for Them

    When you constantly make decisions for your child, you may be unintentionally limiting their ability to develop critical life skills. From small choices like picking out their clothes to larger decisions about friendships or activities, children need the freedom to explore and make mistakes. By allowing them to take responsibility for age-appropriate decisions, you’re not only fostering their independence but also building their confidence in their ability to navigate the world. Without this autonomy, children may struggle to trust their judgment later in life.

    According to child development experts, giving kids the chance to make decisions teaches them important lessons in problem-solving and consequences. Dr. William Stixrud, co-author of The Self-Driven Child, emphasizes the need to “give your child as much control as possible over their own life.” This approach encourages self-reliance, helping children feel empowered rather than dependent. Allowing them to choose, fail, and try again will set them up for success in adulthood, where decision-making is an essential skill.

    5-
    Montessori Busy Board 2 3 4 Year Old Toddlers Girl Toys: Preschool Learning Activity Baby Quiet Book Birthday Gifts Easter Basket Stuffers Classroom Game Autism Educational Travel Toy 12 18 Months

    5. You Don’t Trust Them

    A lack of trust between parent and child can create a significant strain on your relationship, especially if you consistently doubt their honesty or abilities without just cause. Trust is the foundation of a strong bond, and children who feel trusted are more likely to behave responsibly and confidently. Conversely, when children sense that you don’t believe in them, they may start to internalize that doubt, leading to low self-esteem and even rebellious behavior. Striking the right balance between trust and supervision is key to maintaining a healthy dynamic.

    According to Dr. Shefali Tsabary, author of The Conscious Parent, “Trust is an essential ingredient in creating a relationship where the child feels empowered to be authentic.” Trusting your child doesn’t mean leaving them to make all their decisions unsupervised, but rather, it involves giving them the space to show that they are capable of responsible behavior. By expressing confidence in their judgment, you’re reinforcing their self-worth and nurturing a sense of accountability. This will help your child grow into a trustworthy and dependable individual.

    6-
    Niacinamide with Hyaluronic Acid Vitamin C Serum For Face, Amino Acid Facial Serum, All Skin Types & Skincare Hydrating, Oil-Free Moisturizing, 1 Fl.Oz

    6. You Ignore Their Voice

    Dismissing your child’s opinions, feelings, or preferences can leave them feeling undervalued and overlooked. When parents constantly override their child’s voice, it sends the message that their perspective doesn’t matter. This not only damages self-esteem but can also inhibit open communication in the long term. It’s important to recognize that even young children have valid thoughts and emotions, and by listening to them, you foster a deeper connection based on respect and mutual understanding.

    Active listening is an essential part of building a trusting relationship. Dr. Daniel Siegel, co-author of The Whole-Brain Child, emphasizes the importance of validating a child’s feelings, noting that “connection begins with listening.” While you don’t have to agree with everything your child says, making them feel heard helps them develop emotional intelligence and the confidence to express themselves. Encouraging this open dialogue strengthens your relationship and creates a safe space for them to share their thoughts and concerns.

    7-
    Arshiner Kid Girls Hollow Back Ballet Leotard with Skirt Sleeveless Dance Dresses

    7. You Constantly Criticize Them

    While offering guidance and constructive feedback is a vital part of parenting, constant criticism can erode your child’s self-esteem and sense of self-worth. Children internalize the messages they receive from their parents, and if those messages are primarily negative, they may begin to doubt their abilities and develop a fear of failure. Instead of focusing on their mistakes, it’s more beneficial to highlight their achievements and strengths. Acknowledging their efforts, even when they don’t succeed, encourages a growth mindset, where they feel motivated to improve and grow rather than fearful of making mistakes.

    Parenting expert Alfie Kohn, in his book Unconditional Parenting, emphasizes the importance of fostering a child’s intrinsic motivation by focusing on their efforts and progress rather than merely critiquing their shortcomings. By framing feedback in a supportive and encouraging way, you empower your child to strive for improvement without feeling constantly judged. Encouragement builds resilience and self-confidence, which are essential traits for facing life’s challenges with a positive attitude.

    8-
    Zomchi Double Edge Razor Blades 2.0, 100 Counts Safety Razor Blades for Shaving, Platinum Stainless Steel Shaving Blades for Men and Women, Fits All Standard Double Edge Razors

    8. You’re Way Too Involved in Their Social Life

    Being overly involved in your child’s social life, from selecting their friends to arranging their social activities, can stunt their ability to form meaningful relationships independently. While it’s natural to want to protect your child from negative influences, they need the freedom to navigate social interactions, make choices, and even experience conflicts on their own. These experiences are crucial for learning how to build and maintain relationships, set boundaries, and develop emotional intelligence. Constant interference can send the message that you don’t trust them to make good decisions, which can lead to dependency or resentment.

    According to Raising an Emotionally Intelligent Child by Dr. John Gottman, giving your child the space to handle their social life allows them to learn important social skills such as conflict resolution, empathy, and assertiveness. Of course, guidance is essential, especially when it comes to teaching them about healthy friendships, but ultimately, they need to learn from their own experiences. By stepping back, you’re allowing them to grow into socially adept and confident individuals who can manage their relationships with maturity and independence.

    9-
    DeStress Herbal Tea Bags by VitaCup, Relax & Chill w/Chamomile, L-Theanine, Valerian Root & B Vitamins, Caffeine Free Single Serve Wellness Tea Sachet Bag, 14 ct

    9. You’re Always Trying to Solve Their Problems

    As a parent, it’s natural to want to jump in and solve every problem your child faces, but constantly rescuing them from challenges can hinder their development of problem-solving skills. Whether it’s a disagreement with a friend or a difficult math problem, children need the opportunity to struggle, think critically, and find solutions on their own. By stepping in too quickly, you’re not only sending the message that they can’t handle things on their own, but you’re also robbing them of the chance to develop resilience and independence.

    Educational psychologist Dr. Angela Duckworth, author of Grit: The Power of Passion and Perseverance, underscores the value of allowing children to face challenges and learn from failures. She argues that children need to develop “grit”—the ability to persevere in the face of difficulties—by being given the space to figure out solutions on their own. Encourage your child to problem-solve by asking guiding questions rather than offering immediate answers. This approach helps them build confidence in their abilities and equips them with the tools they need to navigate life’s inevitable challenges.

    10-
    Garbage Bags, 100 Count 8 Gallon Trash Bags 1.18Mils Tall KitchenTrash Bags Heavy Duty Trash Bags Kitchen Garbage Bags for Kitchen Office Bedroom Bathroom Trash Can Liners

    10. You Set Unrealistic Goals for Them

    Setting high expectations for your child can be motivating, but when those goals become unrealistic, they can create unnecessary stress and a crippling fear of failure. Whether it’s in academics, sports, or personal development, children need to be challenged in a way that encourages growth rather than feeling overwhelmed. When parents impose goals that are out of reach, it can lead to burnout, anxiety, and a sense that their best efforts are never good enough. Instead, focus on setting goals that push your child just beyond their comfort zone but are still attainable, allowing them to experience success and learn from setbacks.

    Child psychologist Carol Dweck, known for her research on the growth mindset, emphasizes that parents should encourage effort and persistence rather than perfection. In her book Mindset: The New Psychology of Success, Dweck explains that celebrating progress, no matter how small, fosters a love for learning and development. By helping your child understand that improvement is a gradual process, you promote resilience and perseverance, allowing them to approach challenges with confidence instead of fear.

    11-
    Zizor Men’s Moccasin Slippers With Memory Foam, House Shoes for Indoor Outdoor

    11. You Completely Ignore or Downplay Their Interests

    When parents ignore or dismiss their children’s passions, it sends a clear message that their individuality isn’t valued. Children need to feel that their interests, whether in art, sports, or any other area, are supported and nurtured. When their passions are belittled or disregarded, it can erode their self-esteem and stifle their natural curiosity. Embracing your child’s unique interests, even when they don’t align with your values or aspirations, demonstrates that you respect their individuality and trust their ability to choose their path.

    Renowned child psychologist Dr. Edward Hallowell, in his book The Childhood Roots of Adult Happiness, stresses the importance of allowing children to explore their interests freely, as it contributes to their overall sense of purpose and fulfillment. By providing encouragement and showing genuine interest in your child’s passions, you create an environment where they feel empowered to pursue what makes them happy. Supporting their interests not only strengthens your bond but also instills confidence and a sense of agency in their lives.

    12-
    VH Nutrition GOTU KOLA | 1300mg Centella asiatica Extract | Cognitive and Memory Support Supplement* | Boost Mental Clarity, Enhance Focus, Improve Brain Health | 60 Capsules

    12. You Shield Them from Even the Slightest Hardships

    As a parent, it’s natural to want to shield your child from difficulties, but overprotecting them from the inevitable challenges of life can stunt their emotional growth. When children are too sheltered from hardship, they miss out on essential opportunities to develop resilience, coping mechanisms, and problem-solving skills. Facing adversity, whether it’s failing a test or dealing with a difficult friendship, teaches children valuable lessons about perseverance and emotional strength. Shielding them from every setback only prevents them from learning how to handle disappointment and recover from failure.

    Psychologist Dr. Wendy Mogel, author of The Blessing of a Skinned Knee, advocates for letting children face challenges to build resilience. She explains that “by experiencing manageable amounts of stress, children learn how to handle disappointment and frustration, which prepares them for larger life challenges.” Rather than removing obstacles from their path, it’s more beneficial to offer support and empathy while allowing your child to work through their struggles. This approach equips them with the tools they need to navigate the complexities of life with confidence and maturity.

    13-
    Turmeric Curcumin Supplement with Ginger, Ceylon Cinnamon and Black Pepper Complex 5 in 1 Formula, Curcuma Longa, Max Absorption Joint Support, 1000 mg, 120 Herbal Extract Capsules

    13. You Don’t Allow Them to Be Independent

    When parents constantly step in to handle every task, from mundane chores to major life decisions, they hinder their child’s ability to develop independence. While it may seem like an act of care, doing everything for your child deprives them of the chance to build self-reliance and problem-solving skills. For instance, letting them pack their lunch or manage their homework fosters responsibility. More importantly, as they grow older, allowing them to make decisions about their education or career teaches them accountability and helps them gain confidence in their choices.

    According to clinical psychologist Dr. Laura Markham, children thrive when allowed to practice independence in a safe and supportive environment. In her book Peaceful Parent, Happy Kids, she explains that “children who are encouraged to make decisions, even if they occasionally fail, develop a stronger sense of self.” By gradually giving your child more freedom and responsibility, you equip them with the life skills needed to succeed as autonomous individuals, which in turn strengthens their resilience and self-confidence.

    14-
    Women’s Dress Booties Cut Out Chunky Heeled Sandals Ankle Buckle Strap Peep Toe Boots

    14. You’re Hyper-Focused on Their Safety

    While prioritizing your child’s safety is a natural part of parenting, being overly protective can inhibit their ability to explore the world and learn through experience. Excessive caution, whether by limiting physical activities or shielding them from challenges, can stifle a child’s sense of adventure and curiosity. Encouraging your child to take age-appropriate risks and make their own decisions about safety helps them develop awareness of their boundaries and capabilities. Allowing them to explore, within safe limits, teaches them valuable life lessons about risk management and self-assurance.

    Dr. Michael Ungar, a family therapist and author of Too Safe for Their Own Good, highlights the importance of allowing children to face controlled risks. He argues that “by keeping children overly protected, we deny them the chance to develop their coping skills and resilience.” Instead of eliminating every potential hazard, focus on preparing your child to navigate risks responsibly. This balanced approach allows them to build confidence in their abilities, while still understanding how to assess and handle challenging situations on their own.

    15-
    Doctor’s Recipes Melatonin Gummy 2.5 mg, with L-Theanine & Herbs, Natural Berry Flavored Sleep Gummies, Vegan, No Sugar & Gelatin, No Drug & Non-Habit Forming, 50 Count

    Conclusion

    Maintaining a healthy balance between involvement and over-control is essential for your child’s development. Over-scheduling, overemphasizing success, and invading privacy are all signs that you may be exerting too much control. While these behaviors are often motivated by love and a desire to protect, they can unintentionally create distance, resentment, and stress for your child. By recognizing these tendencies, you can start making small changes that will allow your child to flourish as an independent, well-rounded individual.

    It’s important to remember that children thrive when they feel trusted and valued for more than just their accomplishments. Giving them room to breathe, fail, and grow on their own will help build their confidence and equip them with the life skills they need. As psychologist Madeline Levine, author of The Price of Privilege, says, “Our job is not to prepare the road for our children but to prepare our children for the road.” This means allowing them the freedom to navigate life’s challenges independently while knowing you’re there to support them when needed.

    As a parent, it’s easy to fall into the trap of making decisions for your child, doubting their abilities, or dismissing their voice, but these behaviors can limit their growth and harm your relationship. Children need the opportunity to practice decision-making, to feel trusted, and to be heard, so they can develop confidence, resilience, and a sense of responsibility. By relinquishing some control and giving your child more autonomy, you’re helping them develop the essential life skills they need to succeed.

    Building trust, offering choices, and actively listening to your child strengthens your relationship and helps them feel valued. As parenting expert Dr. Haim Ginott once said, “Children are like wet cement—whatever falls on them makes an impression.” By fostering an environment where they feel trusted, heard, and capable, you lay the groundwork for them to grow into confident, self-assured adults who can navigate life with both independence and wisdom.

    Criticism, over-involvement, and problem-solving are well-meaning parental behaviors that can unintentionally limit your child’s ability to grow and thrive. Constant criticism can lead to a negative self-image, while over-involvement in their social life stifles their independence and problem-solving ability. It’s important to allow children the space to learn from their mistakes, navigate relationships, and tackle problems on their own. These experiences are key in helping them develop confidence, resilience, and the social skills they need for success in the real world.

    By offering guidance rather than control and support rather than judgment, you foster an environment where your child feels safe to explore, fail, and try again. As Dr. Kenneth Ginsburg, author of Building Resilience in Children and Teens, explains, “Our role as parents is to prepare our children for the path, not the path for our children.” In allowing your child to face life’s challenges with your trust and support, you help them become independent, self-reliant individuals capable of handling whatever comes their way.

    Setting unrealistic goals, dismissing your child’s passions, and overprotecting them from hardship are all well-intentioned behaviors that can inadvertently hinder their personal development. Unrealistic expectations create undue pressure while downplaying their interests diminishes their sense of identity. Similarly, shielding them from life’s challenges prevents them from building resilience and problem-solving skills, which are essential for success in adulthood. Children need the freedom to set achievable goals, pursue their passions, and experience both successes and setbacks to grow into well-rounded individuals.

    By offering support instead of control, and encouragement rather than criticism, parents can foster an environment where children are free to explore, fail, and learn. As Dr. Carol Dweck highlights in Mindset, “The path to success is learning to embrace challenges and mistakes and to view them as opportunities for growth.” When you give your child the space to face challenges head-on, with your guidance and trust, you empower them to become confident, independent individuals who can thrive in an ever-changing world.

    Over-parenting by limiting independence or being overly concerned about safety can have unintended consequences on a child’s development. While it’s natural to want to protect your child from harm and failure, not allowing them to handle tasks on their own or experience minor risks can stunt their growth. Children need the opportunity to take responsibility for their own decisions, both big and small, to build confidence, independence, and critical thinking skills. Similarly, while safety is important, children also need the freedom to explore, make mistakes, and learn from their experiences.

    As Dr. Laura Markham emphasizes in Peaceful Parent, Happy Kids, “The goal of parenting is not to raise a child who is safe at all times, but one who is capable of making safe choices on their own.” By fostering independence and allowing children to experience calculated risks, parents can help them develop into resilient and capable individuals. Balancing protection with empowerment ensures that children grow up confident in their ability to navigate the challenges and uncertainties that life presents.

    Recognizing the fine line between guiding your child and controlling their every move is crucial for fostering healthy development. While the intention behind controlling behaviors often stems from a place of care and concern, too much oversight can hinder a child’s ability to grow into an independent, confident adult. From over-scheduling their time, focusing excessively on success, and invading their privacy, to ignoring their voice or making all their choices—each of these behaviors, while well-meaning, can have lasting negative effects on a child’s sense of self-worth and ability to navigate life on their own.

    Experts like Dr. Carol Dweck and Dr. Laura Markham emphasize the importance of cultivating an environment that balances support with freedom, allowing children to explore, fail, and learn through their own experiences. In her book Mindset, Dweck reminds us that “children develop a sense of self-confidence and resilience when they are allowed to face challenges and make their own decisions.” By stepping back, parents provide the space children need to build critical life skills such as decision-making, problem-solving, and emotional regulation.

    In conclusion, a healthy parenting approach encourages autonomy, nurtures individual interests, and offers guidance without overpowering a child’s sense of self. Allowing your child to learn from mistakes, pursue their passions, and experience life’s ups and downs will equip them with the resilience and independence needed to thrive. As parenting expert Dr. Wendy Mogel suggests in The Blessing of a Skinned Knee, “Parents must trust in their children’s abilities to handle life’s challenges, as it is through these challenges that they grow into capable adults.” By relinquishing control in measured ways, you foster an environment of trust, growth, and self-discovery, ensuring your child is prepared to navigate the world with confidence.

    Bibliography on Good Parenting

    1. Markham, Laura. Peaceful Parent, Happy Kids: How to Stop Yelling and Start Connecting. Perigee Books, 2012. This book offers insights into raising children through positive parenting techniques, promoting emotional connection and discipline without yelling or controlling behaviors.
    2. Dweck, Carol S. Mindset: The New Psychology of Success. Ballantine Books, 2006. In this book, Carol Dweck discusses the importance of fostering a “growth mindset” in children, encouraging resilience, effort, and the belief that abilities can be developed through dedication.
    3. Ungar, Michael. Too Safe for Their Good: How Risk and Responsibility Help Teens Thrive. McClelland & Stewart, 2007. Ungar explores the idea that overprotecting children limits their ability to handle risk and develop essential coping skills. The book advocates for providing controlled opportunities for risk-taking to build resilience.
    4. Mogel, Wendy. The Blessing of a Skinned Knee: Using Jewish Teachings to Raise Self-Reliant Children. Scribner, 2001. This book draws from Jewish teachings to promote balanced parenting, encouraging parents to allow their children to experience challenges and learn responsibility through them.
    5. Siegel, Daniel J., and Tina Payne Bryson. The Whole-Brain Child: 12 Revolutionary Strategies to Nurture Your Child’s Developing Mind. Bantam Books, 2011. Siegel and Bryson provide strategies for helping children manage their emotions and foster healthy brain development, focusing on integrating all parts of the brain to build resilience and emotional intelligence.
    6. Gottman, John. Raising an Emotionally Intelligent Child: The Heart of Parenting. Simon & Schuster, 1997. Gottman outlines strategies for teaching emotional intelligence to children, emphasizing the importance of understanding and managing emotions for healthy relationships and development.
    7. Faber, Adele, and Elaine Mazlish. How to Talk So Kids Will Listen & Listen So Kids Will Talk. Scribner, 1980. This classic book offers communication strategies for parents, helping them navigate conflict, set boundaries, and foster better understanding with their children.
    8. Baumrind, Diana. Child Care Practices Anteceding Three Patterns of Preschool Behavior. University of California, Berkeley, Institute of Human Development, 1967. Diana Baumrind’s foundational research on parenting styles introduced the concept of authoritative, authoritarian, and permissive parenting, which remains highly relevant to discussions on balanced parenting approaches.
    9. Kohn, Alfie. Unconditional Parenting: Moving from Rewards and Punishments to Love and Reason. Atria Books, 2005. Kohn challenges traditional parenting methods that rely on control, rewards, and punishments, advocating for a more compassionate, understanding approach to child-rearing.
    10. Levine, Madeline. The Price of Privilege: How Parental Pressure and Material Advantage Are Creating a Generation of Disconnected and Unhappy Kids. Harper, 2006. Levine explores the emotional and psychological effects of over-parenting, particularly in affluent families, emphasizing the importance of allowing children to develop resilience and self-worth.

    This selection of books covers a wide range of perspectives on how to nurture children’s independence, emotional intelligence, and resilience while maintaining a loving and supportive parent-child relationship.

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog

  • Mufti Abdul Qavi on Marriage and Nikah

    Mufti Abdul Qavi on Marriage and Nikah

    This transcript features an interview with Mufti Abdul Qavi, a Pakistani religious figure, who discusses his views on marriage, Nikah (Islamic marriage), and his numerous marriages. He defends his actions, referencing Islamic texts and historical figures while engaging in a lively debate with the interviewer about religious interpretations and practices. The conversation touches upon various social and political issues, including his past interactions with prominent Pakistani figures like Imran Khan. He also expounds on his understanding of Sufism and the role of religious leaders.

    Islamic Discourse and Practices: A Study Guide

    Quiz

    Instructions: Answer each question in 2-3 sentences.

    1. According to the interviewee, what is the difference between “marriage” and “nikah?”
    2. What is the significance of the term “Mufti” as discussed in the interview?
    3. The interviewee references a fatwa concerning marriage for a prominent Pakistani figure. What was the nature of the fatwa and what prompted its issuance?
    4. The interviewee discusses his involvement in conducting nikahs. What does he say about his role and the circumstances under which he performs them?
    5. According to the interviewee, what role does a wali (guardian) play in the Islamic practice of nikah?
    6. How does the interviewee describe the concept of Muta in relation to Nikah?
    7. The interviewee mentions a number of prominent religious scholars in connection to their scholarship. Name two of these figures and a main area of their research.
    8. What anecdote does the interviewee share about a woman in his family and the concept of Ummahatul Momineen?
    9. The interviewee makes reference to his travels. What is one main reason he travels?
    10. In the discussion about Hazrat Khizar, what does the interviewee emphasize regarding his status?

    Answer Key

    1. The interviewee differentiates “marriage” from “nikah” by stating that marriage is a public, legal act with witnesses and registration, while nikah is a religious contract that can be performed privately or publicly. Nikah is not necessarily a legally recognized marriage.
    2. The term “Mufti” is described as referring to a religious scholar who belongs to a particular sect or religion and provides religious guidance. However, the interviewee suggests his authority goes beyond sect and that he provides fatwas that apply broadly across the Muslim community.
    3. The interviewee issued a fatwa to allow a public figure to marry multiple times, since under the law of the country, the loss of property can occur in a marriage dissolution. The fatwa allowed the man to do multiple nikahs, in order to avoid property loss.
    4. The interviewee claims he has taught and performed nikahs over the phone and has conducted them for prominent members of society. He emphasizes he conducts the nikahs in accordance with Islamic law. He claims to have done so at the request of the women who contact him.
    5. The interviewee argues that while traditionally a wali (guardian) is required for a woman’s nikah, Islamic law emphasizes the consent of the adult woman, and her wishes should be prioritized. He claims the Quran and tradition give primacy to the woman in the marriage contract.
    6. The interviewee uses the term Muta to explain a way to perform nikah, as in not restricting the practice of the nikah to only one at a time, but to allow for multiple nikahs, especially to account for circumstances that might require the financial protections afforded by the practice.
    7. Two prominent religious scholars mentioned are Zakir Naik and Ahmed Deedat. Zakir Naik is known for his comparative religious studies, and Ahmed Deedat is known for his Islamic missionary work. The interviewee argues that these scholars support his interpretations of Islamic law.
    8. The interviewee discusses his marriage to a granddaughter of influential figures, expressing regret that she had a short life. He mentions the status of Ummahatul Momineen to show his respect for his spouses.
    9. The interviewee frequently travels to conduct nikahs at the request of women across the world and to participate in religious discussions and conferences. He emphasizes that he frequently travels on his own dime.
    10. The interviewee emphasizes that Hazrat Khizar was a saint (wali) and not a prophet (nabi). He is positioned as being on par with the likes of Moses in representing particular Islamic principles.

    Essay Questions

    1. Analyze the arguments presented by the interviewee regarding the role and authority of a “Mufti” in contemporary Islamic society, drawing connections to historical and traditional understandings of the term.
    2. Discuss the interviewee’s interpretation of Islamic marriage practices, particularly the concepts of nikah, wali, and muta. How does his understanding align with or deviate from traditional Islamic jurisprudence?
    3. Explore the ways in which the interviewee positions himself as an authority on Islamic law. How does he balance his reliance on religious tradition with his claims to offer practical and contemporary interpretations?
    4. Based on the interview, what conclusions can be drawn about the relationship between religion, law, and personal autonomy in the interviewee’s understanding of Islamic practices?
    5. How does the interview engage with diverse perspectives within the Muslim community, such as those of Shia and Sunni Muslims, and what does this reveal about the nature of religious authority within Islam?

    Glossary

    • Nikah: Islamic marriage contract, considered a religious act.
    • Mufti: A Muslim legal expert who is authorized to give legal interpretations or rulings (fatwas) on Islamic law.
    • Fatwa: A legal opinion or ruling on a point of Islamic law issued by a qualified Mufti.
    • Ilham Kitab: A term used in this context to refer to the scriptures of other religions. The text implies that this is an alternative to an revealed book, and therefore less authoritative than the Quran.
    • Umrah: A non-mandatory Islamic pilgrimage to Mecca, which can be undertaken at any time of year.
    • Maulvi: A term often used to refer to a Muslim religious scholar or cleric, especially in South Asian contexts.
    • Muta: A temporary marriage in Shia Islam, here the interviewee uses the term to explain a way to practice multiple nikahs.
    • Sharia: Islamic law, derived from the Quran and the teachings of the Prophet Muhammad.
    • Wali: A guardian or legal representative, especially for a woman in matters of marriage under Islamic law.
    • Ahle Sunnat: Those who adhere to Sunni Islam.
    • Ahle Tashya: Those who adhere to Shia Islam.
    • Ummahatul Momineen: “Mothers of the Believers,” a title given to the wives of the Prophet Muhammad, signifying high respect.
    • Khanqah: A building designed for gatherings of a Sufi brotherhood or a spiritual retreat.
    • Tasawwuf: Islamic mysticism or Sufism, often characterized by a focus on spiritual experience and closeness to God.
    • Tariqat: The Sufi path or method of spiritual practice and development.
    • Shariat: The formal and legal aspect of Islamic practice.
    • Ihsan: “Perfection” or “excellence,” the highest level of faith in Islam, characterized by a deep sense of sincerity and mindfulness in worship and daily life.
    • Hadith: Narrations of the words and actions of the Prophet Muhammad, used as a source of guidance in Islam.
    • Nabi: Prophet in Islam.
    • Rasul: Messenger in Islam.
    • Wali: A saint or friend of God.

    Mufti Abdul Qavi Interview Analysis

    Okay, here is a detailed briefing document reviewing the main themes and important ideas from the provided text, which appears to be a transcript of a Pakistani talk show featuring Mufti Abdul Qavi:

    Briefing Document: Analysis of Mufti Abdul Qavi Interview

    Date: October 26, 2023 (Approximate based on context, no explicit date given). Source: Excerpts from a transcribed Pakistani talk show featuring Mufti Abdul Qavi, hosted by Muneez Moin.

    Overview: The provided transcript is an excerpt from a lengthy and wide-ranging interview with Mufti Abdul Qavi, a controversial Pakistani religious figure. The discussion touches upon various sensitive topics including marriage, Nikah, Muta, the role of women, religious authority, political affiliations, and interpretations of Islamic law. The interview is characterized by frequent digressions, anecdotes, and self-promotion by the Mufti, making it a complex and often contradictory source. The interviewer attempts to maintain order, but the Mufti often dominates the conversation.

    Key Themes and Ideas:

    1. Distinction between Marriage and Nikah:
    • Mufti Abdul Qavi repeatedly emphasizes a distinction between “marriage” and Nikah, arguing that marriage, as defined by Pakistani law, is a public, registered event with specific requirements, while Nikah is a religious ceremony.
    • He suggests that a Nikah can be performed multiple times (even citing his own multiple Nikahs) with a separate agreement in Sharia law, while marriage is legally limited. This point is central to many of his arguments and justifications.
    • He states that “in the laws of my Pakistan and all the people of Islam in the world, you can do second marriage only after some Sharia, but not before that.”
    • He claims that a person can get multiple Nikahs at the same time with no legal effect.
    1. Muta (Temporary Marriage):
    • Mufti Qavi touches upon the idea of Muta, which is a temporary form of marriage practiced by some Shia Muslims. He uses it to justify his own practice of multiple Nikahs, implying that he considers these as different kinds of relationships than typical marriage.
    • He states: “so I gave a fatwa for him that he should do one marriage and Nikaah should be done two or three times. Let us do four things which I am calling Muta”.
    1. Polygamy and the Limits of Marriage:
    • Mufti Abdul Qavi makes a claim that the Prophet Muhammad was allowed more than four wives and therefore, according to his interpretation, it is within the realm of possibility that others would have a more liberal approach to polygamy: “…the Quran says about marriage… two, three, four but you are Habibullah [beloved of Allah], I am especially bringing a change in the law for you, you can marry 11, you can marry 12, you can marry 13, you can marry 14, according to a tradition 18…”
    • He also claims that this applies specifically to the Prophet Muhammad, which seems like a deviation from the conventional interpretation of the Quran. He goes on to state that he himself is limited to four Nikahs.
    • He mentions the former ruler of Saudi Arabia who had four wives at one time.
    • He also references historical Islamic figures such as Syedna Imam Hasan Mujtaba and Syedna Imam Zainal Abidin, implying that polygamy was common.
    1. The Role of Women and the Concept of Wali:
    • The Mufti argues that women, particularly those who are financially independent, have a greater say in marriage decisions.
    • He states that he believes that the voice of the woman must be followed if there is a conflict with the wali (guardian).
    • He challenges the traditional requirement of a Wali (male guardian) for a woman’s Nikah. He argues that the Quran directs marriage towards the woman, and if she is sane and adult, her consent is paramount.
    • He states: “According to Hanafi, within the law of Shariat and according to my Quran, seven times the Quran has referred to marriage towards the lady and not towards the Wali.”
    • He contrasts this view with what he describes as traditional and outdated interpretations of Islam where the Wali is seen as more important.
    1. Religious Authority and Fatwas:
    • The Mufti engages in a lot of self-promotion, repeatedly referring to himself as a Mufti Azam (Grand Mufti) despite challenges to his legitimacy.
    • He emphasizes his role as a religious authority, claiming that his fatwas (religious rulings) carry significant weight and are based on extensive research of the Quran.
    • He justifies his often controversial stances by claiming he has a unique understanding and connection to Allah and religion that other religious scholars don’t have.
    • He mentions his fatwas on topics ranging from the number of marriages to a fatwa concerning the marriage of Imran Khan.
    • He claims his fatwas are based on consideration of what is best for Muslims worldwide including those living in various diaspora communities who are at risk of losing wealth in divorce proceedings.
    • He often takes offense at those who challenge or question his religious authority.
    1. Political Affiliations and Imran Khan:
    • Mufti Qavi expresses strong support for Imran Khan and his political party (PTI).
    • He recounts how he was previously respected by Khan and given a key role in religious affairs in PTI. He uses this association to enhance his own credibility.
    • He appears disappointed that Khan’s attitude toward him has changed. He is hurt that Khan calls him “Mufti sahab” and no longer “Kavi sahab” or “Mufti sahab”.
    1. Controversial Statements and Provocations:
    • The Mufti makes several controversial remarks throughout the interview, including:
    • A comment about wanting to give the female anchor a nose ring to make her “fortunate.”
    • His discussion of the number of Nikahs he has had and the status of his previous wives. He makes a claim that he is currently nearing the 40th Nikah.
    • The Mufti claims to know the meaning of the name “Riham” and that her name predicted she would “fly and spread pride” before Imran Khan married her.
    • He speculates that a woman he married died in Las Vegas, insinuating it was her fault she died rather than his fault for having her in his Nikah.
    • He dismisses an incident of murder he is associated with because he is not a “murderer” or a “lover.”
    • He claims that he married women who were more financially stable than him and that these unions have improved his finances.
    • He claims that a large percentage of the Nikahs he has facilitated (62-65%) were initiated over the phone at the request of women.
    • He also claims the ability to make predictions based on an assessment of people’s thumbs.
    • These statements are often presented as jokes or lighthearted comments, but they reveal a dismissive attitude toward women and a lack of respect for conventional social and religious norms.
    1. Interpretation of the Quran and Hadith:
    • The Mufti claims to have a deep understanding of the Quran and Hadith (sayings and traditions of the Prophet), but his interpretations frequently appear unorthodox and self-serving.
    • He uses these sources to support his positions on marriage and the status of women, often citing them selectively and out of context.
    • He claims that his understanding of Islam and the Quran is superior to other religious scholars.
    1. Mysticism and Sufism
    • He claims that those who are silent in the position of Adam are part of Khanqahi and represent Ahle Sunnat and Ahle Tashya.
    • He contrasts the position of the Prophet Musa, whom he claims represents Islam, and the position of Hazrat Khizar, whom he considers a wali (saint) who represents Ihsan.

    Quotes:

    • “Now a lady from India has come, what is her name, Rahi Sanat, I want to ask her one thing. Sawant, Rakh Sawant, I want to ask her one thing. That you do not have any Nikah anywhere in Hindu religion or Muslim religion…”
    • “…the book that Hindus have is the Ilham Kitab, well its meaning is that now the lady of the Ahl-e- Kitab, well she had gone for Umrah the other day, Mashallah…”
    • “…I gave a fatwa for him that he should do one marriage and Nikaah should be done two or three times. Let us do four things which I am calling Muta.”
    • “…the Quran says about marriage… two, three, four but you are Habibullah [beloved of Allah], I am especially bringing a change in the law for you, you can marry 11, you can marry 12, you can marry 13, you can marry 14, according to a tradition 18…”
    • “According to Hanafi, within the law of Shariat and according to my Quran, seven times the Quran has referred to marriage towards the lady and not towards the Wali.”
    • “I will make you wear it. No, no, no, I have seen the world through your eyes. I am dying. Oye Mufti Sahab’s nose ring, the one who wears it will become fortunate.”
    • “…I joined PTI in January 2012, I came with great fun… Khan sahab is saying in reply that after today our religious matters should be taken care of. Mufti Abdul Qavi sahab will see…”
    • “I told you that 62 to 65 percent of the Nikahs I have taught over the telephone, I have taught at the request of women…”
    • “the lucky one who reads a verse of the Quran during the sermon of Syedna Ali Pak, we are calling him Khari, rejected from Islam…”

    Analysis and Implications:

    • Controversial Figure: Mufti Abdul Qavi’s views are highly controversial and challenge established religious and legal norms in Pakistan. His interpretations of Islamic texts are often seen as unorthodox and designed to justify his own actions.
    • Social Impact: His statements, particularly about marriage and women’s roles, could potentially influence public discourse and create confusion about Islamic teachings.
    • Legitimacy: The interview highlights a struggle over religious authority, with the Mufti attempting to assert his legitimacy despite the challenges and criticisms he faces.
    • Political Undercurrents: The discussion underscores the complex interplay between religion and politics in Pakistan, as well as how political figures may exploit religion to secure power and prestige.
    • Complex Subject: The transcript demonstrates the complexities surrounding marriage practices and legal interpretations in the Islamic context. It highlights varying and often conflicting views on the subject.

    Conclusion:

    This interview with Mufti Abdul Qavi offers a glimpse into a complex and controversial figure whose interpretations of Islam frequently deviate from mainstream views. His comments highlight ongoing debates about religious authority, the role of women in society, and the interpretation of Islamic law. The transcript needs to be critically analyzed with an understanding of the social and political context in which it has been produced. The Mufti’s claims should not be taken at face value without being carefully verified against established scholarly opinions and other perspectives.

    This briefing doc provides a comprehensive overview of the main points and will hopefully be of use in your further work with this document.

    Nikah, Marriage, and Modern Islamic Interpretations

    Frequently Asked Questions

    1. What is the difference between “Nikah” and “marriage” according to the speaker?
    2. The speaker distinguishes between Nikah and marriage, stating that under Pakistani law, “marriage” refers to a registered and publicly announced union, typically involving two witnesses and the consent of both the individuals involved. Nikah, on the other hand, seems to have a broader meaning that might include different forms and contexts including a “mut” or temporary marriage. The speaker suggests that Nikah can be done via phone, by a scholar, without witnesses, and even without the Wali/guardian of a woman, and often can be done without the public awareness.
    3. What are the speaker’s views on the role of a “Wali” (guardian) in a woman’s Nikah?
    4. The speaker argues that the traditional view of a Wali’s (guardian’s) necessity for a woman’s Nikah is not completely supported by the Quran. He believes that in Hanafi fiqh, like a man, a woman who is sane and adult has the right to decide whether or not to marry, and that her consent is paramount. The Quran, he claims, refers to marriage seven times in relation to the woman not the Wali. He emphasizes that if there is a conflict between a woman and her Wali, Islam prioritizes the woman’s choice, particularly if she is financially independent. This is a modern interpretation that conflicts with most interpretations.
    5. How does the speaker define the role of a “Mufti” and why is he sometimes called “Mufti Azam”?
    6. The speaker explains that a Mufti is traditionally someone who belongs to a specific sect or religion. However, he himself is sometimes called “Mufti Azam,” implying a position of greater authority or influence, because he issues fatwas (religious opinions) that take into account a broad range of Muslims, even those living in the West with specific financial and legal concerns. He claims he provides fatwas that will benefit those living in unique circumstances from “Moscow to Afghanistan,” such as a fatwa allowing multiple Nikahs to avoid complications when immigrating to the West. He implies his fatwas are not confined to traditional interpretations.
    7. The speaker discusses multiple Nikahs and their legality. What is his general perspective on this issue?
    8. The speaker states that while Pakistani law allows second marriages only after specific requirements are met, there is some flexibility in terms of Nikah, implying that he has advised men to perform multiple Nikahs, specifically for situations involving financial and legal concerns. He makes mention that even in religious texts, there are examples of multiple Nikahs. He states that some people find it controversial that he has done as many Nikahs as he has, which he alludes to being roughly 40. He sees that for men there are very few restrictions on Nikah, but that women are often not treated as equally in this context.
    9. What are some of the controversial statements or actions that the speaker is known for?
    10. The speaker has numerous controversial statements. He is well-known for:
    • His multiple marriages and his willingness to marry and teach others to perform Nikah over the phone or via online communication.
    • His opinions regarding a woman’s right to marry without a Wali, which is against more traditional interpretations.
    • His assertion that there is no veil of the face.
    • His issuing fatwas on matters that some might consider politically sensitive, or controversial, such as advising someone to get multiple Nikahs to avoid financial losses in the West.
    • His bold declarations that he supports women’s autonomy, such as when he stated to a group of female students that a father who ignores a woman’s wishes regarding marriage, should be cursed.
    1. The speaker makes several references to historical figures and events. How do these relate to his arguments?
    2. The speaker uses historical figures such as Syedna Imam Hasan Mujtaba and Syeda Ayesha Siddika, to contextualize his arguments on Nikah and the status of women within Islam. He uses these examples to challenge orthodox views and support his assertion that he follows the true way of the prophet and that the practices he performs are not new or without precedent. His references to the marriage of the Prophet and how marriage has changed over time, he states, have confused some Muslims.
    3. What is the speaker’s perspective on the interpretation of religious texts and traditions?
    4. The speaker presents himself as someone who interprets the Quran and Hadith with a focus on reality, convenience, and wisdom, rather than sticking to traditional, strict interpretations. He claims to be applying his own personal research on the matter and has come to his own conclusions. He claims that those who do not agree with him are creating conflict. He says that his approach to religion is to see it as a day of mercy and that those who do not interpret it as such, are either not reading the texts correctly, or are in a position to create division, such as with some modern Maulvis (clerics).
    5. The speaker talks about “Khanqahi” and “Sufism.” How do these ideas fit into his overall views?
    6. The speaker identifies as a “Khanqahi,” a person associated with a Sufi spiritual retreat or lodge. He distinguishes this approach to Islam from a more traditional, legalistic, and sometimes dogmatic “Mullah” approach. He equates the Khanqahi way with “Ihsan,” which is the pursuit of spiritual excellence. He seems to view the “Mullahs” as individuals who are representing only Shariat, not Tariqat and Ihsan, which he believes also play a crucial role in the Muslim faith. He often implies he is above a Mullah and is following a more authentic path.

    Nikah and Marriage in Pakistan

    The sources discuss Nikah and marriage, differentiating between the two concepts and exploring various aspects of their religious and legal implications.

    Nikah vs. Marriage:

    • The sources suggest that Nikah and marriage are not the same thing.
    • According to the speaker, Nikah is a religious term, whereas marriage has legal implications, especially in Pakistan.
    • A Nikah can be performed multiple times, whereas a legal marriage can only be performed once at a time.
    • The sources describe the laws of Pakistan, stating that a second marriage can only be done under certain Sharia laws.
    • Nikah can be performed over the telephone, and it does not require the presence of witnesses from both sides of the couple.
    • The sources also mention that Nikah requires the consent of the woman.

    Nikah and the Number of Marriages:

    • According to the Quran, a man can marry two, three, or four women.
    • It is mentioned that the Prophet Muhammad was given special permission to marry more than four women, some traditions say as many as 18.
    • The sources suggest that a man can perform Nikah multiple times, which may be part of the concept of “Muta,” which can be two, three or four.
    • The speaker in the sources claims to have performed many Nikahs, including for prominent figures like commissioners, DC Sahabs, and Brigadier Sahabs.
    • One speaker admits to having performed dozens of Nikahs.

    The Role of a Wali:

    • A Wali (guardian) is necessary for a woman’s Nikah.
    • However, according to the speaker in the sources, the woman’s consent is more important than the consent of the Wali.
    • The sources state that some religious scholars believe that Nikah can occur without a Wali, while others disagree, and that this is a topic of debate.
    • In Hanafi law, both men and women are considered equally innocent in matters of marriage and do not require a Wali, and the Quran has also addressed marriage more directly to women than to a guardian.
    • It is also mentioned that if there is a conflict between the woman and her guardian, the woman’s word will be obeyed.

    Other Points:

    • The speaker in the sources gave a fatwa (religious ruling) to Imran Khan suggesting he perform Nikah multiple times.
    • There are some who believe that Nikah is only valid if it is performed in the presence of a Wali, while other’s believe Nikah is more about consent.
    • The speaker states that they have performed Nikahs at the request of women and the teachers in the madrasa do not even know whose Nikah is happening.
    • The sources also describe how Nikah can be performed for a variety of different reasons.

    The speaker in the sources seems to have a unique interpretation of Nikah and marriage, often going against traditional practices and beliefs, and offering different perspectives on the topic, while also bringing up real legal considerations.

    Mufti Abdul Qavi: Nikah, Marriage, and Controversy

    Mufti Abdul Qavi is a prominent figure in the sources, and much of the discussion revolves around his views and actions related to Nikah and marriage. He is presented as someone with a unique interpretation of religious practices, often challenging traditional beliefs and practices.

    Key aspects of Mufti Abdul Qavi as presented in the sources:

    • Title and Recognition: He is frequently referred to as “Mufti,” although some people, including himself, believe that the term “Mufti Azam” (Grand Mufti) is more appropriate given his wide reach and influence. He notes that some consider him a Mufti, while others do not.
    • Religious Authority: Mufti Abdul Qavi is portrayed as a religious scholar who issues fatwas (religious rulings) on various issues. He claims that his fatwas are based on his understanding of the Quran, Sharia law, and the teachings of the Prophet Muhammad.
    • Interpretation of Nikah and Marriage: He differentiates between Nikah and marriage, with Nikah being a religious act and marriage having legal implications. He emphasizes that Nikah can be performed multiple times, and that the consent of the woman is paramount. He also believes a Wali (guardian) is not always necessary for Nikah, especially when the woman is an adult and has given her consent.
    • Controversial Stances: Mufti Abdul Qavi’s views are often presented as controversial, as they challenge traditional Islamic practices related to Nikah. For instance, he suggests that a man can perform Nikah multiple times and has issued a fatwa allowing a man to marry multiple times, which he refers to as “Muta,” which can be two, three, or four times. He also believes that Nikah can be performed over the phone without witnesses.
    • Personal Life: He claims to have performed numerous Nikahs, including those of prominent figures. The speaker also admits to having married many women, some of whom were financially better off than him. He notes that this is a source of some embarrassment for him. He states that he has married women who are wealthy and that he takes care of them financially, even after their separation.
    • Political Involvement: He was associated with Imran Khan’s political party, PTI, and was tasked with handling religious matters. The speaker notes that he had a close relationship with Imran Khan who called him Mufti Sahab or Kavi Sahab.
    • Knowledge and Wisdom: Mufti Abdul Qavi is presented as a knowledgeable figure with a deep understanding of Islamic texts and traditions. He emphasizes the importance of wisdom, reality, and nature in his interpretations of religious matters.
    • Public Figure: He is also a public figure who appears on television programs, where he discusses his views on religion and society. He has a unique style of speaking and often engages in discussions that challenge traditional norms. He often references that his comments make the program “go viral”.
    • Unique Perspectives: He offers a unique perspective on various topics, including the nature of prophethood and the role of saints. He differentiates between the status of prophets and saints, stating that Hazrat Khizar was a saint and not a prophet.
    • Respect for Women: Mufti Abdul Qavi expresses that he respects women and their rights within Islam and Sharia. He also stated that in the case of a disagreement between the guardian and the woman, he believes the word of the woman should be obeyed.

    Overall, Mufti Abdul Qavi is depicted as a complex and controversial figure, known for his unique interpretations of Islamic teachings and his willingness to challenge traditional practices.

    Islamic Marriage Laws: Mufti Abdul Qavi’s Interpretations

    The sources discuss various aspects of Islamic marriage laws, particularly focusing on the concepts of Nikah, marriage, and the roles of a Wali (guardian). These discussions are largely centered around the views and interpretations of Mufti Abdul Qavi, which often challenge traditional Islamic practices.

    Key points regarding Islamic marriage laws from the sources:

    • Nikah vs. Marriage: The sources distinguish between Nikah, which is considered a religious act, and marriage, which has legal implications. Nikah can be performed multiple times, while legal marriage can only occur once at a time under the laws of Pakistan.
    • Number of Marriages: According to the Quran, a man can marry two, three, or four women. The Prophet Muhammad was given special permission to marry more than four women. The concept of “Muta” is mentioned, which can involve two, three or four Nikahs.
    • The Role of a Wali (Guardian): The sources highlight differing views on the necessity of a Wali for a woman’s Nikah.
    • Traditional Islamic law often requires a Wali for a woman’s Nikah.
    • However, Mufti Abdul Qavi argues that a woman’s consent is more important than the Wali’s consent, and that a Wali is not always necessary, particularly if the woman is an adult and has given her consent.
    • The sources mention that in Hanafi law, both men and women are considered equally innocent in matters of marriage and do not require a Wali.
    • According to the sources, if there is a disagreement between the woman and her guardian, the woman’s word should be obeyed.
    • Consent: The sources emphasize that the consent of the woman is a key element of Nikah.
    • Nikah Procedures: Nikah can be performed in various ways, even over the phone, according to the sources. The speaker in the sources claims to have performed many Nikahs over the telephone.
    • Witnesses: The sources state that Nikah does not necessarily require the presence of witnesses from both sides of the couple.
    • Legal Requirements: In Pakistan, a second marriage can only be done under certain Sharia laws.
    • Diverse Interpretations: The sources reveal that there are diverse interpretations of Islamic marriage laws and practices. Mufti Abdul Qavi’s views often contrast with traditional beliefs and practices.

    Mufti Abdul Qavi’s Unique Perspective:

    • Mufti Abdul Qavi presents a unique and often controversial interpretation of Nikah. He states that Nikah is a religious act and different from legal marriage.
    • He emphasizes the importance of a woman’s consent in Nikah and challenges the traditional role of the Wali.
    • He claims that Nikah can be performed multiple times, and he suggests that this may be part of the concept of “Muta,” which can be two, three or four times.
    • He argues that the Quran addresses marriage more directly to women than to a guardian.

    Other Relevant Points:

    • The sources suggest that a woman’s financial status can be a factor in Nikah.
    • The sources mention that Nikah can be performed for various reasons, and the speaker claims to have performed Nikahs at the request of women.

    It is important to note that Mufti Abdul Qavi’s interpretations are not universally accepted within the Islamic community, and that there is a range of views on the application of Islamic marriage laws.

    Islamic Marriage: Mufti Abdul Qavi’s Interpretations

    The sources present various religious opinions, primarily focused on Islamic interpretations of marriage, Nikah, and the role of a Wali (guardian), often through the lens of Mufti Abdul Qavi’s unique perspectives.

    Key areas of religious opinion discussed in the sources:

    • Nikah vs. Marriage:The sources differentiate between Nikah as a religious act and marriage as a legal contract, primarily under Pakistani law.
    • Mufti Abdul Qavi suggests that Nikah can be performed multiple times, while legal marriage is limited to one at a time.
    • Number of Marriages:The Quran permits a man to marry two, three, or four women.
    • It is mentioned that the Prophet Muhammad was given special permission to marry more than four women.
    • The sources introduce the concept of “Muta,” which may involve two, three or four Nikahs.
    • The Role of a Wali (Guardian):Traditional Islamic views often require a Wali for a woman’s Nikah.
    • However, Mufti Abdul Qavi argues that a woman’s consent is more important than the Wali’s consent.
    • He also suggests that a Wali is not always necessary, especially if the woman is an adult and has given her consent.
    • In Hanafi law, both men and women are considered equally innocent in matters of marriage and do not require a Wali.
    • If there is a disagreement between the woman and her guardian, the woman’s word should be obeyed.
    • Consent:
    • The sources emphasize that the consent of the woman is a key element of Nikah.
    • Mufti Abdul Qavi suggests that Nikahs can be performed based on the woman’s request.
    • Nikah Procedures:
    • Mufti Abdul Qavi states that Nikah can be performed over the phone and does not require witnesses from both sides.
    • Interpretations of Islamic Law:The sources demonstrate that there is a range of interpretations of Islamic marriage laws.
    • Mufti Abdul Qavi’s interpretations often differ from traditional Islamic beliefs and practices.
    • Other Religious Figures and PerspectivesThe sources also mention other religious figures and their perspectives, like Zakir Naik and Hamidullah, who are referenced in the discussion about the religious texts of Hinduism.
    • The sources also discuss differences of opinion between Sunni and Shia Muslims.
    • There are differing opinions on the status of Khizar, with Mufti Abdul Qavi stating that Khizar was a saint, not a prophet, while also noting that in a certain context there is a consensus about Khizar in both Ahle Sunnat and Ahle Tashya.
    • Specific Religious Rulings (Fatwas)Mufti Abdul Qavi claims to have issued fatwas on various topics.
    • He mentions giving a fatwa to Imran Khan regarding marriage.
    • The Quran and Hadith:The sources indicate that the Quran is interpreted differently by different people.
    • Mufti Abdul Qavi references the Quran and Hadith in his interpretations and rulings.

    Mufti Abdul Qavi’s Unique Religious Perspectives:

    • He presents a unique interpretation of Islamic teachings, often challenging traditional norms.
    • He believes in the importance of wisdom, reality, and nature in religious interpretations.
    • He differentiates between the status of prophets and saints.
    • He prioritizes the consent of women in Nikah over the traditional role of the Wali.

    Important Note: It’s important to recognize that Mufti Abdul Qavi’s views are not universally accepted within the Islamic community, and there exists a diversity of religious opinions regarding marriage and Nikah. The sources present a specific perspective, but there are many other valid viewpoints and interpretations of Islamic law.

    Islamic Marriage Traditions and Mufti Abdul Qavi’s Interpretations

    The sources discuss various marriage traditions, primarily within an Islamic context, and often through the lens of Mufti Abdul Qavi’s interpretations and experiences.

    Key Aspects of Marriage Traditions Discussed in the Sources:

    • Nikah as a Religious Act: The sources emphasize the concept of Nikah as a religious act. Nikah is distinguished from legal marriage. It is mentioned that Nikah can be performed multiple times, unlike a legal marriage, which is limited to one at a time under the laws of Pakistan.
    • Multiple Marriages:Islamic tradition permits a man to marry up to four women. The sources also mention that Prophet Muhammad was allowed to marry more than four women.
    • The concept of “Muta” is introduced, which can be two, three, or four Nikahs. Mufti Abdul Qavi seems to suggest that he considers “Muta” to be a form of marriage.
    • Role of the Wali (Guardian): The sources present differing views on the necessity of a Wali for a woman’s Nikah.
    • Traditionally, a Wali is required for a woman’s marriage.
    • However, Mufti Abdul Qavi argues that a woman’s consent is paramount and that a Wali is not always necessary, especially if the woman is an adult and has given her consent.
    • He claims that in Hanafi law, both men and women are considered equally innocent in matters of marriage and do not require a Wali.
    • If there is a conflict between the woman and her Wali, the woman’s word should be obeyed.
    • Consent: The sources stress that the consent of the woman is essential for Nikah. Mufti Abdul Qavi claims to have performed Nikahs based on the wishes of the women.
    • Nikah Procedures:The sources suggest that Nikah can be performed in various ways, even over the phone.
    • It is mentioned that Nikah does not necessarily require witnesses from both sides of the couple.
    • Mufti Abdul Qavi claims to have taught the Nikah over the phone many times.
    • Marriage as a Public Affair: The sources suggest that marriage is traditionally a public affair with celebrations and announcements.
    • Financial Considerations: The sources suggest that financial status can play a role in marriage. Mufti Abdul Qavi admits to having married women who were financially better off than him.
    • Legal Marriage Requirements: The sources mention that in Pakistan, a second marriage can only occur under certain Sharia laws.

    Mufti Abdul Qavi’s Unique Perspective:

    • Mufti Abdul Qavi often challenges traditional marriage practices. He differentiates between Nikah and legal marriage.
    • He asserts that Nikah is a religious act and the woman’s consent is more important than the role of the Wali.
    • He is known to have performed multiple Nikahs and to have given fatwas relating to marriage.
    • He has a unique view of the concept of “Muta”, which he suggests may involve multiple Nikahs.
    • He has stated that he has taught many Nikahs over the phone, often at the request of women.

    Other Marriage Traditions Mentioned:

    • The sources mention the tradition of wearing a nose ring in some marriage traditions.
    • The sources reference other cultural marriage traditions, like the baraat, valima, and faala.

    Important Note: It is important to note that Mufti Abdul Qavi’s views on marriage traditions are not universally accepted within the Islamic community. The sources present a specific viewpoint, and there are many diverse opinions and interpretations of Islamic marriage laws and traditions.

    The Most Controversial Interview of Mufti Abdul Qavi | Muneezay Moeen Podcast

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog

  • Building a React Invoice App with Next.js

    Building a React Invoice App with Next.js

    The text comprises excerpts from a .pdf file detailing the development of an invoicing application using Next.js, React, and various UI component libraries (such as Chakra UI and Lucid React). The author meticulously documents the creation of UI components, including tables, forms, and dropdowns, while implementing server-side and client-side validations with Zod and Form. The process covers building routes for invoice creation and editing, integrating email functionality using Mailtrap, and incorporating data fetching and display from a Prisma database. Finally, the author addresses the creation of a dashboard and landing page for the application, highlighting the transition from development to production deployment.

    Project Review: Invoice Management Application

    Quiz

    1. What is the primary purpose of the package.json file in this project?
    • The package.json file lists all the dependencies used in the project and their respective versions. It also includes scripts to run different development processes.
    1. Describe the relationship between layout.tsx and page.tsx in the Next.js app structure.
    • The layout.tsx file defines the overall structure of the page, and the page.tsx file represents a specific route within that layout. The layout renders its children, which are the routes.
    1. Why is TypeScript used in the project, and is it required?
    • TypeScript is used to add static typing, which makes the code simpler and easier to maintain, especially in large projects. However, it is not strictly required and the project can be done with JavaScript.
    1. What is the purpose of the .env file, and what does it contain in this project?
    • The .env file stores environment variables that are needed for the application to run. It includes a secret key used by the Auth.js library and the MailTrap token.
    1. Explain the function of the off.ts file within the utils folder.
    • The off.ts file is a configuration file for off.js. It defines the authentication providers, specifies custom authentication logic and the adapter, like Prisma or Magic links.
    1. What is a “W Handler” in the context of Next.js?
    • A “W Handler” is another word for an API endpoint that uses web request and response APIs to handle different requests, for example when signing in or out the user, or fetching data.
    1. How does the requireUser hook secure routes in this application?
    • The requireUser custom hook checks if a user has an active session. If there is no session, the hook redirects to the login page.
    1. What is the role of the useFormStatus hook and where is it used in this project?
    • The useFormStatus hook provides the status information for the latest form submission. In this project, it is used in the submit button component to track the pending state.
    1. What is the purpose of the MailTrap API token in this application, and how is it used?
    • The MailTrap API token is used to authenticate requests to the MailTrap email service. It’s used to send transactional emails such as the invoice reminder emails.
    1. Describe the primary goal of the PDF generation functionality in this application.
    • The PDF generation functionality generates downloadable invoices. This process creates a PDF with invoice details by fetching them from the database.

    Essay Questions

    1. Analyze the architectural decisions made in this project, particularly concerning the separation of client-side and server-side components and the use of custom hooks.
    2. Discuss the role of third-party libraries (like Auth.js, Shadcn-UI, and jsPDF) in accelerating development and the potential trade-offs of relying on them.
    3. Examine the implementation of authentication and authorization in the project, including the use of magic links and the protection of routes.
    4. Evaluate the user experience design of the application, considering aspects like the login process, onboarding flow, and invoice management.
    5. Describe the process of sending reminder emails and generating PDFs. Include the different tools and steps and how they integrate into the application.

    Glossary

    • pnpm: A package manager similar to npm but known for being faster and more efficient.
    • TypeScript: A superset of JavaScript that adds static typing.
    • ESLint: A tool for identifying and reporting on patterns found in ECMAScript/JavaScript code.
    • TND: An abbreviation that refers to Tailwind CSS, a utility-first CSS framework.
    • App Router: A feature of Next.js that allows you to structure your application using a directory based routing system.
    • Turbo Pack: A high-performance build system optimized for web development, often used with Next.js.
    • vs code: A popular code editor.
    • TS config: A configuration file for TypeScript.
    • package.json: A file that lists dependencies, scripts, and other metadata for a Node.js project.
    • React: A JavaScript library for building user interfaces.
    • NextJS: A React framework for building web applications with features like server-side rendering.
    • deps: Project dependencies, such as libraries or packages that are required for it to function.
    • g ignore file: A file that specifies intentionally untracked files that Git should ignore.
    • EnV: A file used to store environment variables, like sensitive information such as API keys.
    • Def server: A local development server, often used during development of web applications.
    • Off JS: An authentication library for web applications.
    • Magic Links: An authentication method where users click a link sent to their email address.
    • Radex UI: a UI component library used to speed up the development process with pre-made styled components.
    • W Handler: An API route or endpoint that uses web request and response APIs.
    • Prisma: A database toolkit that provides an ORM (Object-Relational Mapper).
    • use client: A directive used to indicate that a component should be rendered on the client-side.
    • useFormStatus: A React hook that provides information about the latest form submission status.
    • Lucid react: A library providing icons for web applications.
    • International API: a JavaScript API used for formatting dates, numbers, and currency according to locale-specific conventions.
    • NodeJS: A runtime environment for executing JavaScript on the server-side.
    • jspdf: A client-side JavaScript library for generating PDFs.
    • MailTrap: A service for email testing and sending with API integration.
    • Sona: A library used for notifications, also known as toast messages, in the front end.
    • fetch: An API used for making network requests.
    • UI.shat cn.com: The website for a popular UI library which provides components.
    • Recharts: A charting library for React applications.
    • Cartesian Grid: A grid used to create a space for data visualization, such as a chart.

    Invoice Management Application Development

    Okay, here’s a detailed briefing document summarizing the provided source, with quotes included where relevant:

    Briefing Document: Invoice Management Application Development

    Document Overview: This document reviews a series of transcripts detailing the development of an invoice management application using Next.js, TypeScript, and various libraries. The excerpts cover project setup, authentication implementation, UI component creation, email integration, PDF generation, data visualization, and the deployment process.

    I. Project Setup and Core Technologies

    • pnpm for Package Management: The developer uses pnpm for project creation, highlighting its differences from npm.
    • “here let me do a pnpm create and then widespace next Das app at latest so this is how you bootstrap a project with pnpm it’s a bit different than if you would use npm…”
    • Next.js as the Framework: The application is built on the Next.js framework, leveraging its features such as the app router and server components.
    • TypeScript for Type Safety: TypeScript is used to enhance code maintainability and reduce bugs. While not mandatory, it’s suggested.
    • “I use typescript it isn’t required you can use JavaScript that’s fine but typescript makes your life a bit simpler easier…”
    • Tailwind CSS for Styling: Tailwind CSS (referred to as “tnd”) is used to style the application. A tailwind.config.js file is part of the setup.
    • Project Structure:app folder: Contains most of the core application logic.
    • page.tsx: Index page.
    • layout.tsx: Application layout.
    • api: For API routes.
    • dashboard: Features dashboard-related routes.
    • invoices: Folder for invoice routes.
    • public: Static assets.
    • utils: Utility functions and configuration.
    • components: Custom and shared UI components.

    II. Authentication with Auth.js

    • Auth.js Implementation: The application uses Auth.js for handling user authentication.
    • “for authentication as you all know there are a lot of options on the market but we will use off JS…”
    • Magic Links: The authentication method is magic links, where users enter their email, and receive a login link.
    • “in off JS or in combination with off JS we will use magic links this is the method we will use to authenticate the user…”
    • Environment Variables: An AUTH_SECRET environment variable is crucial for Auth.js to encrypt tokens and verification hashes.
    • “this means we have to add a environment vable which is the off secret this is a random value used by the library to enp tokens…”
    • API Route Handler: An API route handler /api/auth/[…nextauth]/route.ts is created to manage authentication API endpoints.

    III. UI Component Development

    • Custom Components: The developer creates custom components within a separate components directory to distinguish between shared and custom components.
    • Shadcn/UI Integration: The project integrates components from shadcn/ui for a consistent and styled user interface. Many components are installed, including card, label, input, button, select, textarea, calendar, and popover.
    • Login Form: A login form is built using card, label, input, and button components.
    • “…I want to now render my card uh content and in the card content I want to render my label the input and then also our submit button…”
    • Pending States: The useFormStatus hook is used to display pending states on form submissions.
    • “to show the pending State for the user we will have to use a hook which is called use form status this is a hook provided by react…”
    • Custom Submit Button: A custom SubmitButton component is created to manage loading states.

    IV. Email Integration with Mailtrap

    • Mailtrap SDK: Mailtrap’s Node.js SDK is used to send transactional emails.
    • “this is a relatively new feature with mail trap we have a mail trap client which we can now also Implement into our application and then we don’t have to use SMTP anymore…”
    • API Token: The Mailtrap API token is stored in an environment variable (MAILTRAP_TOKEN).
    • Email Templates: A no-code UI builder is used to create email templates. In this specific case, a “reminder email” template is used.
    • Email Sending Logic: An email is sent after an invoice is created.
    • “once the user creates an invoice I want to send a email and that’s what we will do inside of here…”
    • Email Template: The mailtrap HTML UI builder is utilized to craft a visually appealing reminder email.

    V. PDF Generation with jsPDF

    • jsPDF Library: jsPDF library is used to generate PDF documents on the server side.
    • PDF Document Setup: The PDF is configured with orientation, unit (millimeters), and format (A4).
    • “let’s initialize JS PDF so let me do a constant PDF or you could call it DOC but I think PDF is a bit more uh what would you say explanatory if this makes sense and then this is equal to new jspdf…”
    • Dynamic Data Rendering: Data from the invoice is dynamically used to populate the PDF. This includes invoice details, sender and receiver information, and item descriptions.
    • Custom Layout: The PDF layout is customized with font sizes, text positioning, and lines.
    • Content Disposition: The PDF is returned with a header indicating inline display.

    VI. Data Visualization

    • Recharts Library: Recharts, integrated through Shadcn/UI, is used to create a chart within the dashboard.
    • Graph Component: A separate graph component is made which utilizes a JavaScript bundle and is marked as use client. This component displays a line chart representing paid invoices over the past 30 days.
    • Data Preparation: The graph data is dynamically fetched and passed to the recharts components.

    VII. Other Important Implementation Details

    • Server Actions: Server actions were utilized for form handling and data modification.
    • Custom Hooks: A custom requireUser hook was created to check if the user is authenticated for protected routes and a custom formatCurrency function was created to ensure consistency when displaying monetary values.
    • Toasts: Sonner library is used to display toast notifications when there is a success or failure of actions.
    • Empty State: A custom EmptyState component is displayed when no invoices are present on the dashboard.
    • Dynamic Routes: Dynamic routes such as dashboard/invoices/[invoiceId] are used to handle individual invoice pages.
    • Suspense Boundaries: Suspense boundaries are added for asynchronous components to improve user experience while data is loading.

    VIII. Key Quotes and Takeaways

    • Focus on UI Consistency: The developer emphasizes importing components from the custom components folder rather than directly from shadcn/ui to avoid errors.
    • “please make sure that you import all of your components from the components folder please don’t import it from radex UI if you import it from redex UI you will get a lot of errors and you don’t want that…”
    • Code Organization: Importance was placed on a clean architecture, utilizing a utils folder, separate component folders for different component types, and a custom hooks file for reusable logic.
    • Importance of Error Handling: There is a consistent implementation of try-catch blocks to gracefully handle errors and display user-friendly messages.
    • Data validation: There is a consistent validation of data to ensure data integrity. This includes id validation, user authorization, and checks for optional values.

    IX. Next Steps

    • Landing Page: The final step before deployment is creating a landing page.
    • Deployment: The application is prepared for deployment.

    Conclusion: The transcript highlights a detailed development process for an invoice management application using a variety of modern web technologies. It emphasizes the importance of code organization, user experience, error handling, and consistent UI. This briefing document should serve as a comprehensive overview of the development process.

    Building a Next.js App with pnpm and Auth.js

    1. What is pnpm and how does it differ from npm when creating a new project?

    pnpm (Performant npm) is a package manager that is similar to npm (Node Package Manager), but with differences in how it creates projects. When using pnpm, you would use pnpm create followed by the desired project template (in this case, widespace next), while npm uses npm create followed by the project template. Pnpm is known for its efficient disk space usage and faster install times.

    2. Why is TypeScript used in this project, and is it required?

    While not strictly required, TypeScript is used in this project to make development simpler and easier by providing static typing to JavaScript. TypeScript makes it easier to catch errors and maintain the codebase. However, JavaScript is also a viable option if you are not familiar with TypeScript. The project can be followed without any prior Typescript knowledge.

    3. Can you explain the folder structure of this Next.js project?

    The project structure includes the following key folders and files:

    • tsconfig.json: Configuration file for TypeScript.
    • twin.config.js: Configuration file for Tailwind CSS (tnd).
    • package.json: Contains project dependencies (e.g., React, Next.js) and scripts.
    • next.config.js: Configuration file for Next.js settings, including image whitelisting.
    • .gitignore: Specifies files and directories to ignore in Git.
    • public/: Stores static files like images and videos.
    • app/: The most important folder containing application routes and layouts.
    • page.tsx: The index page of the application.
    • layout.tsx: The main layout component that wraps all routes.
    • globals.css: Stores CSS variables.
    • fonts/: For storing custom fonts.
    • api/: Contains API routes, including the authentication route (/api/auth/[…nextauth]/route.ts).
    • utils/: Contains utility functions and custom hooks.
    • components/: Contains reusable UI components.

    4. How does the layout component work in Next.js, and how is it connected to pages?

    In Next.js, the layout component, typically layout.tsx, wraps the content of all pages within the app folder. The layout renders its defined elements and then inserts the content of the current page as children via children. This means that elements rendered in the layout are persistent across all routes unless specified otherwise.

    5. What is Auth.js and why is it used in this project?

    Auth.js is an open-source authentication library used to implement authentication for web applications. It provides an easy way to add authentication with various methods. In this project, it’s used with magic links, where users enter their email, receive a link, and are then redirected back to the application, thus validating them as the owner of the email.

    6. How is user authentication handled in this application and what is a magic link?

    User authentication is handled using Auth.js in combination with magic links. A user enters their email address, and the application sends an email to that address containing a unique link. The user clicks the link, and upon returning to the application, their session is established. Magic links provide a passwordless method of authentication.

    7. How is the dashboard route protected and what is the requireUser hook?

    The dashboard route is protected by a custom hook called requireUser. This hook checks if a valid user session exists. If no valid session is found, it redirects the user to the login page. The hook is used on server components to ensure that unauthorized users cannot access secured routes. The requireUser hook encapsulates the logic to check if a user is authenticated and handles the redirection if a user is not.

    8. How is PDF generation implemented and what libraries are used?

    PDF generation is implemented using the jsPDF library. The library is used to create a PDF document programmatically, adding text, lines, and formatted data. Once the PDF document is created, it’s converted into a buffer and returned as a downloadable file (or displayed inline in this example) via the HTTP response.

    Card UI Component Implementations

    The sources describe various implementations of Card UI components, often using a combination of custom components and styling utilities, particularly from Shadcn UI. These cards are used to structure content, provide visual separation, and create interactive elements in web applications.

    Key aspects of card UI in the sources include:

    • Structure:
    • Cards are often built using a card component as a base, which may include a card header, card content, and card footer.
    • The card header typically contains titles, descriptions, and icons.
    • The card content houses the primary content of the card, such as forms, tables, or images.
    • The card footer often contains buttons or links for interaction.
    • Layout and Styling:
    • Cards use flexbox and grid layouts for positioning elements.
    • Classes such as flex, flex-col, items-center, justify-center, grid, and grid-cols-* are used for layout.
    • Spacing is controlled using utility classes like gap-*, m-*, p-*, and space-y-*.
    • Cards are given a maximum width using max-w-* and are centered with mx-auto.
    • Background colors, borders, and rounded corners are added using classes like bg-*, border, and rounded-*.
    • Text styling includes classes for size (text-*), weight (font-*), color (text-*), and alignment (text-center).
    • Custom widths can be set using array brackets, for example, w-[380px].
    • Components:
    • Custom components such as Card, CardHeader, CardContent, CardTitle, CardDescription, and CardFooter are used.
    • These components are styled using utility classes from libraries like Shadcn UI.
    • Buttons within cards are often styled using the buttonVariants method to maintain consistency.
    • Icons from libraries like Lucid React are integrated within card components using components such as MailIcon, AlertCircle, ArrowLeft, Pencil, DownloadCloud, Trash, CheckCircle, DollarSign, and Users.
    • Forms and inputs are created within cards, including labels, text areas, and select elements.
    • Images and GIFs are also incorporated into the card.
    • Specific Implementations:
    • Login Form: Uses a card to contain a form with labels, inputs, and a submit button.
    • Verification Page: Uses a card with an icon, title, and description to indicate email verification.
    • Invoice List: Displays a card with a title, description, and a table of invoices.
    • Invoice Creation Form: Uses a card to contain a multi-input form for creating new invoices.
    • Delete Invoice Confirmation: Shows a card with a warning message and confirmation buttons.
    • Mark Invoice as Paid Confirmation: Displays a card with a confirmation message and buttons to mark the invoice as paid.
    • Dashboard Blocks: Uses multiple cards in a grid layout to display key metrics and data.
    • Invoice Graph: Renders a card containing a chart to visualize invoice data.
    • Responsiveness:
    • Cards are designed to be responsive using grid layouts and media queries, like md: and lg: prefixes in class names.
    • Cards may use a maximum width, such as max-w-sm, to limit their size on larger screens.
    • The layout of card content may change based on screen size, for example using grid-cols-2 or grid-cols-3.
    • Interactivity:
    • Cards include interactive elements like links and buttons, often styled with the buttonVariants method.
    • Some cards have popovers or dropdown menus for additional actions or information.
    • Cards are frequently integrated with server actions to perform actions such as submitting forms, deleting invoices, and marking invoices as paid.
    • Theming:
    • Cards use CSS variables provided by Shadcn UI for consistent styling.
    • Color palettes are defined in CSS and used within utility classes such as bg-muted, text-muted-foreground, and bg-primary.
    • Custom colors and gradients are also implemented.

    In summary, the card UI implementations in the sources are built using a combination of flexible layout techniques, custom components, styling utilities from Shadcn UI, and interactive elements. They are designed to be responsive and maintain a consistent look across the application.

    Shadcn UI Button Styling Guide

    The sources provide several examples of button styling, primarily using the buttonVariants method from Shadcn UI, along with other utility classes to achieve specific looks. The goal is to create consistent, accessible, and visually appealing buttons that enhance user interaction.

    Key aspects of button styling include:

    • buttonVariants method:
    • This method is used to apply a consistent set of styles to button elements, whether they are <button> elements or <a> elements styled to look like buttons.
    • It is imported from the components folder and invoked with an object that specifies style variations.
    • The method allows for dynamic styling through variants and class names.
    • Variants:
    • The variant property is a key aspect of button styling using buttonVariants.
    • Common variants include outline, secondary, ghost, and destructive.
    • The outline variant creates a button with a border and transparent background.
    • The secondary variant provides a button with a muted background color.
    • The destructive variant is used to highlight potentially dangerous actions and often uses a red background color.
    • If no variant is provided, the default style is applied.
    • Class names:
    • The class name property is used to add additional styling, including width, margin, and other CSS properties.
    • For example, w-full makes the button take the full width of its container.
    • Other classes include rounded-full for rounded corners, and text-left for aligning text to the left.
    • Button components:
    • Buttons are typically rendered using the <button> component from the components folder or are stylized <a> elements using the <Link> component from next/link.
    • The asChild property is used to prevent the error of a button being a descendant of a button when using the Link component.
    • Icons:
    • Icons from libraries like Lucid React are integrated within button elements to enhance their visual appeal.
    • Icons are given class names for sizing (size-*) and spacing (mr-*, ml-*).
    • Dynamic Text:
    • Button text can be passed as a dynamic property, allowing for the text to be changed without creating a new component.
    • Styling links as buttons:
    • The buttonVariants method is used to style the Link component from next/link to look like buttons, which allows for navigation while maintaining a consistent button style.
    • Accessibility:
    • The button styles provided by Shadcn UI are designed to be accessible, with appropriate contrast and focus states.
    • Submit Buttons:The submit button component is designed to handle form submission and has a pending state with a spinner.
    • The text property renders dynamic text for the submit button, and the variant property allows for different styling variations.

    In summary, button styling in the sources is achieved through a combination of the buttonVariants method, utility classes, and careful integration of icons and text. This approach allows for creating visually appealing and functional buttons that provide a consistent user experience across the application, which enables styling buttons with various backgrounds, borders, text alignment, and interactive feedback.

    Shadcn UI Table Rendering

    The sources describe a comprehensive approach to rendering tables, primarily within the context of displaying invoice data, using a combination of custom components and styling utilities from Shadcn UI. The process involves creating a responsive and visually appealing table that can handle dynamic data and user interactions.

    Key aspects of table rendering include:

    • Structure:
    • A table component serves as the wrapper for the entire table structure.
    • The table is divided into a table header and a table body, each with distinct roles.
    • The table header contains the column labels, rendered using table row and table head components.
    • The table body houses the actual data rows, rendered with table row and table cell components.
    • Components:
    • Custom components like Table, TableHeader, TableRow, TableHead, TableBody, and TableCell are used to construct the table.
    • These components are styled using utility classes from libraries like Shadcn UI, ensuring a consistent look and feel.
    • The table header uses table head elements to define column labels, and the table body renders rows using table cell elements to display data values.
    • Layout and Styling:
    • The table is made responsive using flexbox and grid layouts.
    • Classes such as flex, flex-col, items-center, justify-center are used for positioning.
    • Spacing is managed using classes like gap-*, m-*, p-*.
    • Text alignment is controlled with classes like text-left and text-right.
    • Custom widths can be set using array brackets, for example w-[100px].
    • The table uses CSS variables provided by Shadcn UI for consistent styling.
    • Dynamic Data:
    • Tables are designed to display dynamic data fetched from a database or an API.
    • The data is typically mapped over to create table rows using the map function.
    • Each data item corresponds to a row, and each property of a data item populates the table cells within that row.
    • The key prop is used to uniquely identify each row when mapping over data.
    • Table Header:
    • The table header uses the table head component which serves as labels for the data below, for example, “invoice ID,” “customer,” “amount,” “status,” “date,” and “actions”.
    • Table head elements can be styled individually, for example with text-right, to control alignment.
    • Table Body:
    • The table body renders rows of data with table cell elements.
    • Each table cell contains a value from the fetched data, corresponding to the column it is in.
    • The content of table cells is rendered dynamically, often with the help of helper functions, for example to format a date, or format currency.
    • Actions Column:
    • The “actions” column often includes a dropdown menu for interactions with each row.
    • The dropdown is rendered with the DropdownMenu, DropdownMenuTrigger, and DropdownMenuContent components from Shadcn UI.
    • The dropdown menu items are links styled to look like buttons with the buttonVariants method.
    • These dropdown menus may contain interactive elements such as “edit invoice”, “download invoice”, “send reminder email”, “delete invoice”, and “mark as paid”.
    • The alignment of the dropdown menu content is controlled using the align property of DropdownMenuContent.
    • Responsiveness:
    • Tables are designed to be responsive and adapt to different screen sizes.
    • Layout changes, such as column widths, are often managed using media queries.
    • Integration with other components:
    • Tables are frequently integrated with other components such as cards and popovers to provide a structured user interface.
    • They are often used within card components to display data within a container.
    • Conditional Rendering
    • Tables can be rendered conditionally based on data availability. An empty state component can be rendered if there is no data.
    • A fallback can be rendered when loading table data, for example with the Suspense component.
    • Dropdown menu items can be conditionally rendered, for example, the “Mark as paid” item is only shown when the invoice is not already marked as paid.

    In summary, table rendering in the sources is achieved through the use of a flexible and modular structure with custom components, styling utilities from Shadcn UI, and dynamic data mapping. The resulting tables are responsive, visually appealing, and integrate well with the other UI components of the application, providing users with a clear view of their data and the ability to interact with it.

    Client-Side Validation with Conform and Zod

    Client-side validation is implemented in the sources using the Conform library in conjunction with Zod. This approach ensures that form data is validated on the client side before submission, providing a better user experience with immediate feedback, and also ensures that the data is safe to store in the database.

    Here’s a breakdown of how client-side validation is handled:

    • Zod for Schema Definition:
    • Zod is used to define the schema for form data. This involves specifying the types of fields (e.g., string, number, email) and any additional constraints (e.g., minimum length, required).
    • For example, a schema can specify that a “first name” field must be a string with a minimum length of two characters, and it can provide a custom error message if this rule isn’t met.
    • Schemas are defined in a separate file, for example, zortSchemas.ts.
    • The schemas are then imported in the components where the forms are rendered.
    • Conform for Validation:
    • Conform is used to validate form data against the Zod schema, on both the client side and the server side.
    • The useForm hook from Conform is used to manage form state and validation. This hook is initialized with the last result from the server action, to keep the client and server state in sync.
    • The useForm hook takes a validate callback that performs the actual validation using the passWithZod function.
    • The passWithZod function compares the form data against the Zod schema and returns any errors.
    • passWithZod Function:
    • The passWithZod function is imported from @conform/zod and is used to compare form data against the Zod schema.
    • It takes the form data and the Zod schema as arguments and returns a submission object that contains the validation result, including any errors.
    • useActionState Hook for Server Communication:
    • The useActionState hook from React is used to handle server actions and to get responses from server actions.
    • It takes the server action and an initial state as arguments. It returns the last result from the server action and the server action itself. This hook is used to make a connection between the client side and server side, so that if there are server-side errors, the client can render the errors below the input fields.
    • Form Setup:
    • The form element is connected to Conform using the form.id and form.onSubmit properties that are returned from the useForm hook.
    • The noValidate property is set on the form to prevent the browser’s default validation.
    • Input Field Integration:
    • Input fields are connected to Conform using the fields object returned from the useForm hook.
    • Each input field uses fields.[fieldName].name, fields.[fieldName].key and fields.[fieldName].defaultValue.
    • Error Display:
    • Errors are displayed using fields.[fieldName].errors. This displays any errors returned by the validation process.
    • Error messages are typically styled with a small red font.
    • Validation Triggers:
    • The shouldValidate property in the useForm hook is set to onBlur, which means the form is validated when an input loses focus.
    • The shouldRevalidate property is set to onInput, which means the form is revalidated whenever the value of an input changes. This provides real-time validation as the user types.
    • Reusing Schemas:
    • The same Zod schemas are used for both client-side and server-side validation, ensuring consistency between the two. This reduces the risk of discrepancies in validation logic.

    In summary, client-side validation in the sources utilizes Conform and Zod to provide robust, type-safe, and user-friendly form handling. This approach not only enhances the user experience by providing immediate feedback on errors but also ensures data integrity before it’s submitted to the server.

    Invoice Creation Process

    Invoice creation, as described in the sources, is a complex process involving multiple steps, from designing the user interface to implementing server-side logic for data storage and email notifications. The process is designed to be user-friendly, with a focus on real-time validation and a seamless user experience.

    Here’s a detailed breakdown of invoice creation:

    • User Interface (UI) Design:
    • The invoice creation form is built using a combination of custom React components and styling from Shadcn UI.
    • The form is divided into sections, each with relevant input fields, for example, a “from” section, a “client” section, a “date and due date” section and an “invoice item” section.
    • Input Fields: The form includes various input fields for capturing invoice details, including:
    • Text inputs for names, email addresses, addresses, invoice numbers, and descriptions.
    • A date picker component for selecting the invoice date.
    • A select input for choosing the due date (e.g., net 0, net 15, or net 30).
    • Number inputs for quantity and rate of invoice items.
    • A text area for adding a note.
    • A currency selector.
    • The form is structured using grid layouts to create a responsive design, adapting to different screen sizes.
    • The form is styled with utility classes from Shadcn UI, for example card, input, label and button to maintain a consistent look and feel.
    • Each input is linked to a Conform field, for data management and for client-side validation.
    • Client-Side Validation:
    • Client-side validation is implemented using the Conform library and Zod.
    • Zod is used to define the schema for the invoice data. This schema specifies data types and constraints, such as required fields, minimum lengths, and valid email formats.
    • The useForm hook from Conform manages form state and performs validation against the Zod schema using the passWithZod function.
    • Real-time validation is triggered on blur and input changes with shouldValidate and shouldRevalidate properties in useForm, providing immediate feedback to the user.
    • Errors from validation are displayed below each input field with the fields.[fieldName].errors property.
    • Server-Side Action and Data Handling:
    • A server action is defined to handle the form submission. This action is marked with the use server directive, indicating it will run on the server.
    • The server action uses the same Zod schema for server-side validation, ensuring consistent validation logic.
    • The server action first validates the data against the Zod schema using the passWithZod function. If validation fails, error messages are returned to the client.
    • If validation is successful, the server action proceeds to create a new invoice record in the database using Prisma.
    • Prisma is used as the ORM to interact with the database. The data is stored in the invoice model, which includes fields for all the invoice details.
    • The invoice model also includes relations to the user model, allowing for tracking which user created a particular invoice.
    • The server action returns a new invoice id, so the user can be redirected to the correct page.
    • Email Notifications:
    • After creating the invoice, an email is sent to the client.
    • Mailtrap is used to send emails. The application uses the Mailtrap SDK, which is easier to implement than a generic node mailer.
    • Email templates are created using Mailtrap’s HTML Builder with dynamic data rendering.
    • The server action sends a custom email with the invoice details, using the created template.
    • The email includes the invoice number, due date, total amount, and a link to download the invoice PDF.
    • The email also includes the name of the client, so that the email is personalized.
    • PDF Generation:
    • A PDF document is generated from scratch using the jspdf library.
    • The PDF generation process is initiated via a route handler that fetches the invoice data from the database and converts the invoice details to PDF format, enabling users to download it as a real PDF file rather than just a screenshot.
    • The PDF includes key details such as the invoice number, the names of the sender and recipient, as well as the items, quantity, rate and total.
    • Integration with Other Components:
    • The invoice creation form is integrated into the main dashboard of the application.
    • The form uses other components such as cards and popovers, to keep the layout clear and organized.
    • The invoice creation form fetches the user information, including the name and address from the database, using the user id from the session.
    • Error Handling:
    • Both client-side and server-side validation provide error messages when form data is invalid.
    • Errors are displayed next to the corresponding input fields, giving the user an idea of what needs to be corrected.

    In summary, the invoice creation process is a carefully orchestrated flow involving form rendering, real-time validation, server-side logic, database interaction, and email notifications. It ensures data integrity, provides a smooth user experience, and delivers professional-looking invoices.

    Create a Invoice Platform using Next.js, Mailtrap, Auth.js, Tailwind | 2024
    50+ HOURS REACT.JS 19 MONSTER CLASS

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog

  • GE, Haier, Philips and Apple: Innovation, Diversification, and Resurgence

    GE, Haier, Philips and Apple: Innovation, Diversification, and Resurgence

    The provided text examines the business histories of three prominent companies: General Electric, Philips, and Nintendo. General Electric’s story highlights its rise as a dominant force, its restructuring under Jack Welch, and its eventual sale of its appliance division to Haier, a Chinese company that initially rejected a buyout offer from GE. Philips, known for its innovative products and global reach, chronicles its struggles with over-diversification and its successful pivot toward the healthcare industry. Finally, Nintendo’s narrative explores its evolution from playing cards to video game dominance, its battles with competitors like Sega, and its ongoing adaptation to the changing gaming landscape, including mobile gaming and the Nintendo Switch.

    Navigating Tech Titans: A Study Guide

    Short Answer Quiz

    1. How did General Electric (GE) initially contribute to the development of American homes? GE played a pivotal role in bringing electricity and electrical appliances, like refrigerators, irons, toasters, and ranges, into American homes, fundamentally changing daily life. They also had to invent things so people would want to use electricity.
    2. What were the key factors that led to Haier’s success in the Chinese market? Haier’s success was driven by its focus on quality, beginning with the public destruction of faulty fridges, a commitment to rewarding performance, and adapting to the changing needs of its consumers, especially with a focus on innovation and creating a culture of entrepreneurship.
    3. Describe Jack Welch’s impact on General Electric. As CEO, Jack Welch radically restructured GE, emphasizing a move away from being a bureaucratic organization and towards a business focused on being number one or two in all the industries it pursued. He ruthlessly cut underperforming units and workers, focusing on core industries such as Finance and Aerospace.
    4. How did Philips initially establish its dominance in the lighting market? Phillips gained dominance by improving upon the original light bulb design and mass-producing high-quality bulbs using cotton filaments. This allowed for faster, more effective production and led to the company’s quick expansion.
    5. What challenges did Philips face in the 1990s and early 2000s? Philips suffered from over-diversification, lacked strategic focus, and was slow to adapt to market trends, particularly in the competitive mobile phone and consumer electronics markets, leading to significant losses and a dramatic fall in market share.
    6. What was the significance of the “Think Different” campaign for Apple? The “Think Different” campaign was a pivotal marketing move that successfully reintroduced Apple’s brand as innovative and counter-cultural, attracting both creatives and consumers who wanted to be associated with those values. It was a key component in Apple’s revitalization.
    7. How did the introduction of the iPod and iTunes revolutionize the music industry? The iPod and iTunes created a legal, easy-to-use platform for consumers to download and listen to individual songs, disrupting illegal file-sharing and the traditional album model, transforming how people access and purchase music.
    8. What was unique about Nintendo’s strategy in the early 1980s? Nintendo’s strategy involved limiting game production, enforcing quality control, and positioning its products as entertainment devices rather than just video game consoles, allowing it to stand apart from the saturated market and achieve global success.
    9. Why was the Nintendo Wii a success when the Virtual Boy failed? The Wii’s focus on interactive gameplay and appeal to a broader family audience led to its popularity. In contrast, the Virtual Boy, with its clunky design and uncomfortable gameplay, was a commercial disaster, demonstrating that even innovative ideas need consumer-friendliness.
    10. How has Nintendo tried to adapt to the modern gaming market? Nintendo has strategically entered the mobile gaming market with titles like Pokémon Go and Super Mario Run, while also focusing on hybrid consoles like the Switch that appeal to new generations of gamers. It is also looking into technologies like augmented reality and virtual reality.

    Essay Format Questions

    1. Compare and contrast the strategies employed by General Electric and Philips in the 20th century. Discuss the factors that led to their respective successes and challenges.
    2. Analyze the role of innovation in the rise and fall (and rise) of the companies discussed in the source materials. How did they approach innovation? What factors contributed to the success or failure of their innovative ideas?
    3. Explore the evolution of the consumer electronics market as seen through the lens of Apple, Nintendo, Philips, and Haier. Discuss the factors that contributed to each company’s competitive advantage and eventual struggles.
    4. Examine the significance of leadership and corporate culture in the success and failures of the companies analyzed. How did leadership styles, decision-making processes, and corporate culture influence each company’s trajectory?
    5. Discuss the influence of globalization on the evolution of the companies covered. How have these companies adapted to or been affected by international markets, consumer trends, and technological advances around the world?

    Glossary of Key Terms

    Conglomerate: A company that owns a diverse collection of businesses in different industries, often unrelated to each other.

    Entrepreneurship: The process of designing, launching, and running a new business, often involving risk-taking and innovation.

    Innovation: The introduction of something new; a new idea, method, or device.

    Market Share: The portion of a market controlled by a particular company or product.

    Micro Enterprise: A small business unit operating within a larger organization, with autonomy and direct accountability for its performance.

    Platform (Business): A business model that creates value by facilitating exchanges between two or more interdependent groups, often through technology.

    Renanher: Haier’s business model that divides its large organization into small, independent micro-enterprises.

    Vertical Integration: A business model where a company owns and controls various stages of production, from raw materials to finished goods.

    WinTel: The PC platform based on Microsoft’s Windows operating system and Intel microprocessors.

    The Internet of Things (IoT): The network of physical objects embedded with sensors, software, and other technologies for connecting and exchanging data with other devices and systems over the Internet.

    Corporate Turnarounds: GE, Haier, Philips, Apple, and Nintendo

    FAQ: General Electric, Haier, Philips, Apple, and Nintendo

    • How did General Electric (GE) shift from being primarily known for appliances to focusing on finance and aerospace?
    • GE, once synonymous with household appliances, underwent a significant transformation under CEO Jack Welch. Welch initiated a radical restructuring, prioritizing businesses that were number one or two in their respective markets. GE shifted its focus towards industries like finance and aerospace, which were considered more relevant for future growth. This strategic repositioning led to the eventual divestment of its appliance division, which was deemed less aligned with GE’s long-term objectives.
    • How did Haier, a small Chinese refrigerator company, come to acquire GE Appliances?
    • Haier, initially a struggling refrigerator factory, dramatically improved its quality control under the leadership of Zhang Ruimin. This led to rapid growth and expansion within China. When GE decided to sell its struggling appliance unit, Haier saw an opportunity to expand into the US market and acquire a long-established brand. Haier’s purchase of GE Appliances in 2016 was a major turning point, as it brought together a company known for its innovative work culture and a historically significant appliance business.
    • What is Haier’s “RenDanHeYi” model, and how has it affected GE Appliances?
    • The “RenDanHeYi” model is a unique management system implemented by Haier that divides its workforce into small, entrepreneurial micro-enterprises. Each unit is responsible for its own decision-making and financial survival, fostering a culture of innovation and responsiveness to customer needs. When Haier acquired GE Appliances, it allowed the appliance division to adopt this model, helping GE Appliances become more agile, responsive, and focused on customer satisfaction. GE Appliance’s own innovation lab “First Build” also benefited from this open and feedback-driven model.
    • Why did Philips, once a leader in consumer electronics, shift its focus to healthcare?
    • Philips, initially famous for its light bulbs, expanded into various areas of consumer electronics, but over diversification resulted in massive financial losses in the late 20th century. In response, Philips restructured, divesting from many of its consumer electronics divisions and strategically focusing on healthcare technology, as healthcare industry had strong growth prospects as populations aged, and the company could make an impact by combining its technical expertise with healthcare needs.
    • How did Philips approach its transition into a health technology company, and what innovations have resulted?
    • Philips implemented a strategic transformation, reorienting its research and development efforts towards healthcare, and consolidating to become more streamlined and focused. This led to innovations like remote monitoring systems for patients in Singapore and advancements in medical catheter technology using light. This transition was further solidified by fostering an environment of innovation within the company, integrating design with technological development to come up with solutions, not just products.
    • What were the key factors that led to Apple’s near-bankruptcy in the 1990s, and how did Steve Jobs revive the company?
    • Apple faced a dire situation in the 1990s due to poor product planning, competition from cheaper PCs running Microsoft Windows, and internal divisions following Steve Jobs’ departure. Apple had expanded into too many different product lines and had not effectively competed in the mainstream personal computing market. Steve Jobs returned to Apple in 1997 and implemented drastic changes, which included streamlining the product line, reinvigorating the Apple brand with the “Think Different” campaign, and launching breakthrough products like the iMac, iPod, and iPhone. Jobs was able to recapture the company’s innovative spirit and strong brand identity.
    • How did Nintendo navigate the video game market amidst fierce competition, and what strategies led to its success?
    • Nintendo, which initially had great success with its NES console, struggled to compete in the hardware race with Sony and Microsoft, but shifted its strategy towards innovation and focusing on gaming experience. This led to the success of the motion-based Wii console, which appealed to a much broader range of consumers compared to other, more technically advanced competitors. Nintendo then transitioned to the mobile space with Pokémon Go and Super Mario Run, proving the value of their core franchises and IP. They later found success again with the Switch console which also appealed to a broader market due to its hybrid portability and ability to be played with more people, cementing their ability to rebound despite early failures with the Virtual Boy and the Wii U.
    • What common themes emerge when comparing the turnaround strategies of GE, Philips, Apple, and Nintendo?

    Several common themes appear in the turnaround strategies of these companies: Focus on core strengths, innovation that goes beyond simply product development and towards overall experience, adaptability to changing market conditions, and strong leadership that can implement difficult decisions to steer the company back on course, either by creating micro-enterprises or refocusing an entire company. All of these companies saw periods of decline, demonstrating that no business is too big to fail. However, it also highlights that successful turnarounds require a mix of strategic changes, visionary direction, and the courage to make bold decisions. They all emphasize the importance of being in tune with what consumers really need, and not just releasing products that simply match current trends.

    Tech Giants: Innovation, Adaptation, and Market Dominance

    Okay, here is a detailed briefing document based on the provided text excerpts, exploring the main themes and important ideas, and including relevant quotes:

    Briefing Document: The Evolution of Tech Giants – GE, Philips, Apple & Nintendo

    Executive Summary:

    This document analyzes the trajectories of four iconic companies – General Electric (GE), Philips, Apple, and Nintendo – highlighting their innovative breakthroughs, strategic pivots, and struggles for market dominance. The sources reveal common themes: the impact of visionary leadership, the challenges of managing growth and diversification, the need to adapt to technological disruption, and the crucial role of innovation and design. We see how these companies have shaped consumer culture and continue to influence the technological landscape.

    I. General Electric (GE): From American Icon to Global Acquisition

    • Early Dominance & American Household Revolution: GE, co-founded by Thomas Edison, played a pivotal role in electrifying America. It moved from generating electricity to inventing devices that would use it.
    • Quote: “In 1892 the general electric company was co-founded by the same man who gave us the light bulb Thomas Edison… equally GE needed to invent things so people would buy electricity.”
    • Quote: “GE gave Americans their first electric iron, toaster and electric range but it was the monitor top released in 1927 that was the game changer, the first affordable household refrigerator in America.”
    • The Rise of Mass Consumption: GE’s innovations, particularly the refrigerator, profoundly altered daily life, facilitating less frequent shopping and impacting the agricultural industry.
    • Quote: “Refrigerators were one of the really basic fundamental innovations at the beginning of the 20th century that changed American home life…instead of going shopping every day… it was part of the mass consumption of food industry.”
    • The Welch Era and Restructuring: Under Jack Welch, GE underwent a radical restructure, focusing on becoming #1 or #2 in every market, leading to large-scale layoffs and a shift towards finance and aerospace. This included divesting from non-core areas like appliances.
    • Quote: “Welch ordered a radical restructure. He demanded that GE become number one or two in everything they did.”
    • Quote: “The relevant industries were Finance Aerospace not refrigerators.”
    • The Decline of GE Appliances: The appliance division became a “non-fit” for the restructured GE, leading to years of rumors about a potential sale.
    • The Haier Acquisition: Haier, a Chinese company that once faced GE’s attempts at acquisition, eventually bought GE Appliances, marking a dramatic turn of events.
    • Quote: “This is the inside story of how a small Chinese company that sold defective fridges came to buy over one of the oldest Appliance companies in the world.”
    • Haier’s RenDanHeYi Model: Haier, under leader Jang Ruimin, implemented a revolutionary “RenDanHeYi” model that breaks down the company into small microenterprises, fostering innovation and responsibility. This model was later adapted by GE Appliances.
    • Quote: “Jang divided his 60,000 Global employees into more than a thousand micro Enterprises he termed this model renan her. each unit became a small company responsible for its own decisions and financial survival”
    • Revitalization through Innovation: After acquisition by Haier, GE Appliances under Kevin Nolan, began adopting Haier’s model, experiencing growth and focusing on the Internet of Things (IoT).
    • Quote: “When higher finally came in and acquired us it was a relief uh it was a relief because we’re acquired by someone that really wants us that’s in The Sweet Spot of where they want to grow”
    • Quote: “we’ve looked at that and said that’s a that’s a great strategy buying in that strategy is starting to pay off”

    II. Philips: A Journey from Light Bulbs to Healthcare

    • Early Innovation and Global Expansion: Philips started with light bulbs, expanding to radios and other consumer electronics. Their core was driven by entrepreneurship and innovation, leading to a large electrotechnical company.
    • Quote: “The philosophy of Entrepreneurship and Innovation was driving the company’s growth”
    • Quote: “Philips was very successful in Asia itself because they are a truly globalized company…they were actually manufacturing lamps in India.”
    • Product Diversification and the Danger of Overstretch: Philips expanded their product line into a vast array of products, but by the 1990s, this led to a lack of focus and major losses.
    • Quote: “Philips was over Diversified it just had too many products and spreading itself too thin”
    • The Need for Refocus: The company experienced significant losses and a decline in market share due to being slow to adopt new technologies like LCD and a lack of strategic marketing capabilities. The company struggled due to over-diversification and ineffective management.
    • Strategic Pivot to Healthcare: Under CEO Frans van Houten, Philips shifted its focus from consumer electronics to healthcare, investing heavily in medical acquisitions and R&D, driven by the increasing demand for healthcare services in an aging population globally and especially in Asia.
    • Quote: “In 2014 he announced that after 120 years Philips would split into two separate companies lighting and Healthcare so this allows actually um you know both units to focus on what it can do best”
    • Innovation in Healthcare: Philips is innovating in healthcare through digital programs, remote monitoring, and new medical technology, aiming to improve the lives of 3 billion people annually by 2025.
    • Quote: “Philip’s ambition in healthcare is to improve the lives of 3 billion people around the world by 2025 we are all passionate about this this big mission that is what everybody works for every day.”

    III. Apple: From Garage Startup to Global Giant

    • Early Innovation and the Personal Computer Revolution: Apple, co-founded by Steve Jobs and Steve Wozniak, created the Apple II, one of the first user-friendly personal computers. They focused on design and a user experience that felt personal and intuitive.
    • Quote: “The Apple 2 small inexpensive simple to use one of the world’s first micro computers it had a built-in keyboard and offered high resolution color graphics and sound.”
    • The Macintosh and the Battle with IBM: Apple launched the Macintosh, a groundbreaking computer, but it failed to gain mass adoption, leading to conflicts and Steve Jobs’ departure. It was deemed too expensive for creatives, and not appealing to businesses.
    • Quote: “The Macintosh struggled commercially and this drove a wedge between Steve Jobs and John Scully the CEO”
    • Jobs’ Exile and Apple’s Decline: Without Jobs, Apple struggled with missteps, poor sales, and financial difficulties. They released several products that failed, and faced increasing competition from Microsoft’s Windows. The Newton handheld device failed because it was too ambitious.
    • The Return of Steve Jobs and Transformation: Jobs’ return in 1996 marked a turning point. He focused on product innovation, design, and marketing, leading to the launch of the iMac, iPod, iPhone, and iPad.
    • Quote: “Steve Jobs coming back to Apple it was kind of a field good moment in the sense that you know he is one of the founders come back to the company that he started”
    • The Apple Ecosystem and Brand Loyalty: Apple built a powerful ecosystem through iTunes, the App Store, and retail stores, cultivating strong customer loyalty and creating an immersive customer experience.
    • Quote: “The Apple Store is divided into four parts the the plans for the Apple Stores received a lot of criticism from the industry it was thought to be a huge risk to open a specific retail store just to sell Apple products”
    • Post-Jobs Era and Global Expansion: Under Tim Cook, Apple has continued to grow, embracing new markets, particularly in Asia, and expanding its service offerings. They also face increased competition from Chinese brands, and criticism of business practices.
    • Quote: “Tim Cook is not the same kind of leader that Steve Jobs was he’s not necessarily A Visionary leader but he’s a a great great business strategist”

    IV. Nintendo: A Century of Play, from Playing Cards to Mobile Gaming

    • Origins in Playing Cards and Diversification: Nintendo began as a playing card company, venturing into various business sectors before finding its place in video games.
    • Quote: “Nintendo’s history goes back more than a 100 years the company started out making highquality Hannah Fooda cards”
    • Early Success in Video Games: Nintendo’s breakthrough product was the Nintendo Entertainment System (NES), launching the company to global prominence, driven by game designer Yoko Gumpei’s ethos of low cost, innovative play.
    • Quote: “Released in 1983 the NES was Nintendo’s breakthrough product selling 2 million units within a year of its release and catapulting the company into po position”
    • Rivalry with Sega and the Virtual Boy Failure: Nintendo faced intense competition from Sega in the 1990s. The Virtual Boy, a foray into virtual reality, was a major failure, highlighting a misstep in both design and the technology of the time.
    • Quote: “The virtual boy was panned by Gamers and critics alike it was quickly dismissed as the worst game console ever made”
    • The Wii’s Revolution: Nintendo successfully reinvented itself with the Wii, focusing on interactive gameplay and appealing to a broader audience, including families.
    • Quote: “Nintendo’s success with the Wii was unchallenged more than 100 million units were sold in less than six years”
    • Challenges in the Modern Era: Nintendo has faced challenges due to increased competition, technological change, and the evolving tastes of gamers. This led to their handheld Wii U being unable to compete with tablets.
    • Mobile Gaming and New Console Ventures: Nintendo moved to embrace mobile gaming (with Pokémon Go and Super Mario Run), and new console ventures with the Nintendo Switch, a hybrid handheld and home console.
    • Quote: “all signs are pointing to Nintendo Reinventing the wheel once again this time with the Millennials in mind”
    • Future Direction: Nintendo is exploring virtual reality, augmented reality, and theme parks to continue its legacy in the gaming industry, and the focus on mobile is key. They aim to continue to capitalize on their classic IP.

    Conclusion

    The journeys of GE, Philips, Apple, and Nintendo illustrate the complex dynamics of technology leadership. These companies have all faced periods of innovation, expansion, and decline. Their stories highlight the need for a clear vision, strategic agility, and a commitment to customer satisfaction and continuous innovation. The importance of strong leaders, and responding to customer needs and changes in technology, is something they all had in common. By constantly adapting and reinventing themselves, these companies have shaped not only consumer markets but our everyday lives.

    Haier’s Acquisition of GE Appliances

    In 2014, GE initially made a deal to sell its struggling appliance business to Electrolux, but this deal was blocked by antitrust regulators [1]. In 2016, GE put its appliance unit on the market again, and this time Haier was invited to bid [1].

    Here are some key points about the sale of GE Appliances to Haier:

    • Haier was a small Chinese company that had previously been approached by GE for acquisition in the early 1990s [2, 3]. At that time, Haier declined the offer [3].
    • By 2016, the roles were reversed, with Haier now in a position to acquire GE Appliances [1].
    • Haier’s bid was not the highest, but GE accepted it [1].
    • The final price was $5.6 billion [1].
    • The acquisition of GE Appliances was seen as a significant move for Haier to expand into developed markets like the US [1, 4].
    • For GE, the appliance division no longer fit with the company’s focus on finance and aerospace [2, 5].
    • After the acquisition, GE Appliances maintained its autonomy [1].
    • Haier’s renanher model was implemented at GE Appliances [1]. The renanher model divides a company into many small units responsible for their own decisions and financial survival [3].
    • Kevin Nolan, formerly GE Appliance’s Chief Technology Officer, became CEO after the acquisition [6].
    • There was some initial fear and uncertainty among GE Appliance employees about being acquired by a Chinese company, but this was largely overcome [1, 6].
    • The acquisition by Haier was ultimately seen as a positive move for GE Appliances, as it was acquired by a company that truly wanted it and was in a position to help it grow [6].
    • GE Appliances had lost its place as a market leader in the US and needed to change quickly [1].
    • Haier was seeking “surprises” in product, organization, and business models, as opposed to simply operational efficiency [6].
    • By 2018, GE Appliances reported its best results in a decade, with a 20% profit growth, indicating that Haier’s acquisition was having a positive impact [7].

    The acquisition of GE Appliances by Haier marks a significant turning point for both companies [2]. For Haier, it was a chance to expand its reach into the American market, and for GE, it was a chance to divest a non-core business and focus on its core competencies [2, 4].

    Haier’s Acquisition of GE Appliances

    Haier’s acquisition of GE Appliances was a significant event, marking a turning point for both companies [1, 2]. Here’s a breakdown of the key aspects of this acquisition, drawing on the sources and our previous conversation:

    Background

    • In the early 1990s, GE tried to purchase a small Chinese refrigerator company, Haier (then called the Qingdao Refrigerator Factory), but Haier refused [1, 3].
    • By 2016, the situation had reversed, and Haier was in a position to acquire GE Appliances [2].

    Reasons for the Acquisition

    • GE Appliances was no longer the heart of the General Electric Company and was not a market leader in the US. GE’s focus had shifted to finance and aerospace [1, 2, 4].
    • GE had attempted to sell the appliance unit to Electrolux in 2014, but the deal was blocked by regulators [2].
    • Haier sought to expand into developed markets like the US [2, 5].
    • Haier saw an opportunity to gain a foothold in the American appliance market by acquiring an established brand like GE Appliances [2].

    The Acquisition Process

    • Haier was invited to bid when GE put its appliance unit back on the market in 2016 [2].
    • There were multiple bidders, but GE ultimately accepted Haier’s bid [2].
    • The final price for the acquisition was $5.6 billion [2].
    • The acquisition was not a “do or die” situation for Haier, but it was considered a crucial opportunity [2].
    • There was concern that if one of Haier’s domestic rivals bought GE Appliances it would be disadvantageous to Haier [2].
    • Jang Ruimin, Haier’s CEO, traveled to the US to negotiate the deal with GE’s CEO [2].

    Post-Acquisition

    • GE Appliances maintained its autonomy as part of the acquisition agreement, and Haier could not simply impose its will [2].
    • Haier implemented its renanher model at GE Appliances. This model breaks down the company into small, entrepreneurial units responsible for their own decision-making and financial outcomes [2, 3, 6].
    • Kevin Nolan, GE Appliance’s former Chief Technology Officer, became CEO after the acquisition [6, 7].
    • Initial fears and uncertainty among GE Appliance employees were overcome as Haier demonstrated its commitment to growth [6].
    • Haier sought “surprises” in product, organization, and business models from GE Appliances, not just operational efficiency [2, 6].
    • By 2018, GE Appliances saw a 20% profit growth, indicating the success of the acquisition [8].

    Significance of the Acquisition

    • For Haier, it was a significant step in its international expansion, particularly in the competitive US market [2].
    • For GE, it was a strategic move to divest a non-core business and focus on other sectors [1, 2, 4].
    • The acquisition was a turnaround story for GE Appliances, which had struggled in the years leading up to the sale [2, 6].
    • The integration of Haier’s renanher model led to increased innovation and profitability at GE Appliances [2, 3, 6].
    • The acquisition highlighted the shift in global business dynamics, with a Chinese company acquiring a major American brand [2].

    This acquisition was more than just a business deal; it represented a strategic shift for both companies and a significant moment in the global appliance industry [1, 2].

    Nintendo: From Cards to Consoles

    Nintendo’s history is a fascinating journey of transformation, innovation, and resilience, from a playing card company to a global video game giant [1]. Here’s a detailed look at its key milestones:

    Early Days: From Playing Cards to Toys

    • Founded in the late 19th century, Nintendo began as a manufacturer of “Hanafuda” playing cards, similar to Western playing cards [1].
    • For decades, they dominated the playing card market in Japan [1].
    • By the 1960s, the playing card industry was becoming less popular, and Nintendo needed to diversify [1].
    • The company tried various ventures, including a hot-hell chain, a taxi company, and even a vacuum cleaning business, but all of them failed [1].
    • Nintendo’s entry into the world of toys was sparked by toy designer Gunpei Yokoi [1, 2]. Yokoi’s inventions, like the “Ultra Hand,” led Nintendo to venture into the toy market [1, 2]. Yokoi would become a key figure in Nintendo’s transition into video games [2].

    Entering the Video Game Market

    • In the late 1970s and early 1980s, the video game market saw a boom, followed by a crash due to oversaturation and low-quality games [2].
    • Despite the market turbulence, Nintendo saw an opportunity, deciding to enter the home video game industry [2, 3].
    • Nintendo’s strategy was to distance itself from the struggling games market and present its products as entertainment devices [3].

    The NES Era: Global Success

    • The Nintendo Entertainment System (NES), released in 1983, was Nintendo’s breakthrough product [1].
    • Within a year, the NES sold 2 million units, catapulting Nintendo to global recognition [1].
    • Nintendo brought order to the chaotic video game market by limiting the number of games produced and enforcing strict quality control [3].
    • The NES sold over 60 million units worldwide, and was in production until 2003 [3].
    • Super Mario Brothers 3 became the fastest-selling home video game in history in 1988, grossing over $500 million worldwide [3].

    Facing Competition: The Sega Challenge

    • By the late 1980s, Sega emerged as a strong competitor, targeting an older demographic with its Mega Drive (Genesis) console [3].
    • Sega’s aggressive marketing and technically superior console challenged Nintendo’s dominance [3].
    • Nintendo’s market share plunged from 90% to a low of 35% [3].
    • Nintendo regained some market share with the Super Nintendo Entertainment System (SNES) [4].

    Innovation and Setbacks: The Virtual Boy

    • As new players entered the market, including Sony with the PlayStation, Nintendo needed to innovate [4].
    • Nintendo attempted to introduce a virtual reality console called the Virtual Boy, which was a commercial failure [4, 5]. The Virtual Boy was criticized for its crude red graphics, inducing nausea and headaches [4, 5].
    • The Virtual Boy was pulled from the market after just 18 months [5].
    • Gunpei Yokoi, the key creative force behind many of Nintendo’s hit products, was also the one who designed the Virtual Boy. Tragically, Yokoi died in a car crash in 1997 [5].

    The Wii Era: Reinventing Gameplay

    • In the early 2000s, Nintendo fell to third place behind Sony and Microsoft in the console market [6].
    • The Wii was a revolutionary console that focused on interactive gameplay rather than the latest technology [6, 7].
    • Nintendo designed a motion-controlled console that would appeal to both casual and family gamers [7, 8].
    • The Wii sold over 100 million units in less than six years [8].
    • The success of the Wii was attributed to its low technology, interactive gameplay, and appeal to families [7, 8].

    Challenges and Diversification

    • The Wii U, Nintendo’s next console, failed to replicate the success of the Wii [8].
    • As mobile gaming rose in popularity, Nintendo began moving its library of characters into the mobile space [9].
    • Pokémon Go became a huge success for Nintendo, with its share price increasing by 133% [9].
    • Nintendo partnered with Apple to release Super Mario Run on the App Store, further solidifying its presence in the mobile market [10, 11].

    The Nintendo Switch: Hybrid Gaming

    • The Nintendo Switch was released in 2017 as a hybrid console, functioning as both a handheld and a home gaming platform [11].
    • The Switch focused on mobility and paired the iconic game titles of Nintendo [11].
    • The Switch was designed with a younger audience in mind, and was designed to not require a television, a strategy which set the console apart from other products on the market [11].

    Future Outlook

    • Nintendo is exploring virtual and augmented reality for future hardware [12].
    • Nintendo is also diversifying into theme parks and considering franchising its characters for the big screen [13].
    • Despite the ever-changing market, Nintendo is positioned to survive, thanks to its cultural background, public memory, and innovative technology [13].
    • Nintendo now operates in a market of massive consumer choice, and the company must continue to deliver unique experiences to maintain its position [12].

    Nintendo’s journey is a story of both remarkable successes and significant setbacks. The company’s willingness to adapt, innovate, and prioritize unique gameplay experiences has allowed it to remain a major player in the video game industry for decades.

    Apple’s Ascent: From Near-Bankruptcy to Global Tech Giant

    Apple’s journey from its founding to its current status as a global tech giant is marked by periods of intense innovation, near-bankruptcy, and ultimately, a remarkable reinvention. Here’s an overview of Apple’s transformation, as detailed in the sources:

    Early Innovation and Success:

    • Apple was founded by Steve Jobs and Steve Wozniak in 1976, initially creating basic kit computers [1].
    • The Apple II computer was a breakthrough hit, a small, inexpensive, and user-friendly microcomputer that led to rapid growth and made Apple a major player in the personal computer industry [1].
    • By 1980, Apple went public, creating many millionaires and establishing Steve Jobs as a visionary [1].
    • Jobs envisioned Apple products as “appliances” that would be useful and easy to use [2].

    Setbacks and Challenges:

    • The Apple III was a major failure, with technical issues that damaged the company’s reputation [2].
    • The launch of the IBM PC in 1981 created a major competitor for Apple, with IBM gaining a large market share [2].
    • Despite the launch of the Macintosh in 1984, the first mass-marketed computer with a mouse and on-screen interface, it was too expensive and unconventional for many consumers [3, 4].
    • Internal conflicts between Jobs and CEO John Sculley led to Jobs’s forced resignation in 1985 [4, 5].
    • Microsoft’s Windows operating system, which worked on IBM PCs, further eroded Apple’s market share [5].
    • Apple struggled with a series of “hit and miss” products, including the Newton Message Pad which was too ambitious and ultimately unsuccessful [5, 6].
    • By the late 1990s, Apple was on the brink of bankruptcy due to financial losses, lack of focus, and increasing competition [7].

    The Return of Steve Jobs and Reinvention:

    • In 1996, Apple bought Steve Jobs’s company, NeXT, and Jobs returned to Apple as interim CEO [8].
    • Jobs took immediate and often brutal decisions to save the company, including firing many employees and simplifying the product line [9].
    • Apple launched the “Think Different” advertising campaign to relaunch its brand, attracting creatives and those who wanted to be creative [9].
    • The iMac G3 was a transformative success, a beautifully designed and affordable computer that brought Apple back to profitability [10].
    • The launch of the iTunes music service in 2001 allowed users to legally and easily access music, leading to Apple’s next hardware release: the iPod [11].
    • The iPod portable music player dominated the market and changed the entire music industry [11].
    • In 2007, Apple introduced the iPhone, a revolutionary smartphone that spawned a new era of mobile technology [11].
    • The launch of the App Store in 2008 further cemented Apple’s position in the digital content market [12].
    • Apple created a unique customer experience by designing and launching its own retail stores [12].

    Post-Jobs Era and Continued Growth:

    • After Steve Jobs passed away in 2011, Tim Cook became CEO. Cook is seen as a business strategist who has continued to grow the company [13].
    • Under Cook’s leadership, Apple has grown significantly, especially in Asian markets such as China and India [14].
    • Apple has diversified its revenue streams with the services industry (Apple Music, iCloud, etc.) [15].
    • Apple continues to face challenges, including criticism of its practices and competition in various markets [16].
    • However, Apple is seen as more secure and stable than at any point in its history [15].

    Key Elements of Apple’s Reinvention:

    • Focus on Design and User Experience: Apple has always prioritized creating products that are not only functional but also beautifully designed and easy to use [2, 10].
    • Innovation: Apple has consistently pushed the boundaries of technology, creating new products and services that have disrupted entire industries [11, 12].
    • Branding: Apple has built a strong brand that is associated with quality, innovation, and a unique user experience, attracting a loyal customer base [9, 10].
    • Strategic Leadership: The return of Steve Jobs was crucial in turning the company around, and Tim Cook has continued the company’s success by adapting its growth strategy for new markets [8, 14].
    • Adaptability: Apple has been able to adapt to changing market trends and consumer preferences, from the shift to mobile devices to its focus on services [11, 14].

    In summary, Apple’s reinvention was not a single event but a series of strategic moves and innovative products that transformed it from a struggling computer company into a global leader in technology. The company’s ability to adapt, innovate, and focus on design has enabled it to overcome numerous challenges and maintain its status as one of the world’s most valuable companies [15].

    Philips’ Transformation: From Diversification to Healthcare Leadership

    Philips’ restructuring was a complex and multifaceted process driven by the need to adapt to changing market conditions and reverse significant financial losses. Here’s a detailed account of Philips’ restructuring, based on the information in the sources:

    The Era of Diversification and Decline:

    • Philips, originally known for its light bulbs, had expanded into various product categories, from radios and televisions to consumer appliances and medical devices [1-3].
    • By the 1990s, this broad product portfolio led to problems. Philips was over-diversified and struggled to focus on its core strengths [4].
    • The company’s profit margins dropped significantly, and its market share in key markets eroded [4, 5].
    • Philips suffered massive losses, including a $2 billion loss in 1990, which was the biggest corporate loss in Dutch history [4].
    • Philips entered the competitive mobile phone market, a venture that failed and cost the company over $500 million [4].
    • By the mid-1990s, Philips was a company in disarray, producing a wide range of unconnected products [5].

    Initial Restructuring Attempts:

    • In 1996, Philips hired CEO Co Boonstra to streamline the company [5].
    • Boonstra introduced a “ONE Philips” initiative to unite the company, but individual business units still competed with each other, which made it difficult to drive revenue [5].
    • Boonstra closed down loss-making divisions, reduced the workforce by over 60,000 employees, and consolidated plants and suppliers [5].
    • While these changes improved profit margins, they did not increase long-term product sales [5].
    • Philips remained slow to respond to market trends due to its decentralized decision-making and overstaffing [5].

    The Shift Towards Healthcare:

    • Between 2007 and 2010, Philips invested nearly $8 billion in acquisitions, focusing on medical companies in the USA and Asia [6].
    • The company began planning a strategic shift away from consumer electronics and towards healthcare, which was identified as a growth industry due to the world’s aging population and rising demand in Asia [6, 7].
    • In 2011, Frans van Houten became CEO and spearheaded the company’s transformation into a health technology company [6].
    • Van Houten made the strategic decision to split Philips into two separate companies: lighting and healthcare [6].
    • This allowed both units to focus on their respective markets and build leadership positions [6].
    • Philips appointed Yan Kimpen, a medical doctor, as the new Chief Medical Officer to signal its commitment to healthcare [7].

    Reorganization and Cultural Change:

    • Philips refocused its research and development efforts on healthcare [8].
    • The company restructured its business units to be more connected and focused on a single vision of improving the lives of 3 billion people each year [7].
    • Philips empowered employees to play their role in the transformation and work towards the company’s new healthcare goals [8].
    • Design thinking was implemented to encourage innovation and collaboration across all parts of the company, including research and technology development [8, 9].
    • Philips invested nearly $2 billion in research and development in 2016 [9].
    • The company opened a new regional headquarters in Singapore to serve as its healthcare hub in Asia [9].

    New Healthcare Focus and Innovation:

    • Philips developed new healthcare technologies tailored to the needs of aging populations, such as remote monitoring systems that allow patients to do routine checkups from home [10].
    • These technologies are being used in various parts of Asia, including remote areas, to improve access to healthcare and reduce mortality rates [11].
    • Philips is also developing innovative medical devices, such as a light-based catheter that could revolutionize the diagnosis of heart disease [12].
    • The company’s mantra became “to improve the lives of 3 billion people around the world by 2025” [13].

    Outcomes of Restructuring:

    • By 2016, Philips ranked in the top three global healthcare companies [12].
    • The healthcare division, once a small part of the company, now accounts for more than four times the profits it did a decade prior [12].
    • The company has also recorded $20 billion in sales in 2016 [13].
    • Philips’ transformation was not just about financial performance, but also about creating a more focused, innovative, and customer-centric organization.

    In summary, Philips’ restructuring involved a strategic shift away from consumer electronics towards healthcare, accompanied by a major organizational and cultural change. By streamlining its operations, divesting non-core businesses, and investing heavily in healthcare technology, Philips has reinvented itself as a leading health technology company.

    The Rise & Fall of Haier, Philips, Apple und Nintendo! | Inside the Storm Compilation | FD Finance

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog

  • Public speaking for introverts: Turning quiet strengths into powerful impact

    Public speaking for introverts: Turning quiet strengths into powerful impact

    This article focuses on public speaking strategies specifically tailored for introverts. It challenges the misconception that introversion hinders effective communication, highlighting how introverts’ thoughtfulness, empathy, and authenticity are valuable assets. The text emphasizes mindset shifts, from viewing public speaking as a performance to a connection, and offers practical techniques like thorough preparation, authentic delivery, and mindful energy management. It also underscores the importance of audience understanding and leveraging introverted strengths such as controlled movements and strategic pauses to create impact. Finally, the article mentions the author, a high-performance coach, who helps individuals transform their public speaking skills.keepSave to notecopy_alldocsAdd noteaudio_magic_eraserAudio OverviewschoolBriefing doc

    Public Speaking for Introverts: A Study Guide

    Short Answer Quiz

    1. What is a common misconception about introverts and public speaking?
    2. Name three strengths that introverts possess that can be advantageous in public speaking.
    3. According to the article, what should introverts focus on instead of “performing”?
    4. How can introverts benefit from reframing their self-perception about public speaking?
    5. Why is it beneficial for introverts to research their audience before a speaking engagement?
    6. What are the two steps in preparation that introverts can take to build confidence before a presentation?
    7. What is one way introverts can embrace authenticity during public speaking?
    8. How can mastering the pause be advantageous for introverted public speakers?
    9. Why is it important for introverts to manage their energy levels around public speaking?
    10. What is visualization and how can it benefit introverts in preparing for a speech?

    Short Answer Quiz: Answer Key

    1. The common misconception is that introverts are at a disadvantage in public speaking because they are quieter and less outgoing, while the truth is, they possess strengths well-suited for public speaking.
    2. Introverts have strengths in thoughtful content creation, empathy and listening, and authenticity, all of which are beneficial in public speaking.
    3. Introverts should focus on connecting with the audience and communicating their message rather than performing theatrically.
    4. Introverts can benefit from viewing public speaking as an opportunity for growth and sharing, rather than seeing it as a test or challenge to be feared.
    5. Researching the audience helps introverts tailor their message, making it more relevant, and this reduces pressure, shifting the focus to serving their listeners’ needs.
    6. Introverts can prepare by scripting and rehearsing their speech multiple times to enhance delivery, and they can visualize success to calm nerves.
    7. Introverts can embrace authenticity by speaking in a natural tone, sharing personal stories and acknowledging nervousness.
    8. Mastering the pause allows introverts to add weight to their words, allowing the audience time to process the information and enhancing the impact of the speech.
    9. Introverts tend to find public speaking draining and managing energy by scheduling recovery time, pacing events, and practicing breathing techniques will help them succeed in their delivery.
    10. Visualization is the mental rehearsal of an event by using mental imagery and by practicing this, it builds confidence by activating neural pathways and reinforces a positive mindset.

    Essay Questions

    1. Discuss the unique strengths introverts possess that make them effective public speakers. How do these strengths challenge traditional perceptions of what makes a good speaker?
    2. Explore the importance of audience understanding and connection in public speaking, particularly for introverts. How can introverts use their inherent strengths to build a rapport with their audience?
    3. Analyze the role of mindset and self-perception in public speaking for introverts. How can reframing negative thoughts and fears into positive ones improve their speaking abilities and confidence?
    4. Describe specific strategies introverts can use to prepare for public speaking, emphasizing the importance of preparation, authenticity, and self-care. How do these strategies empower introverts to deliver impactful presentations?
    5. Examine the use of visualization as a tool for introverts to manage anxiety and improve public speaking performance. How does mental rehearsal translate to real-world confidence?

    Glossary of Key Terms

    Authenticity: Being genuine and true to oneself. In public speaking, it means speaking in a way that feels natural and sincere.

    Empathy: The ability to understand and share the feelings of another. For introverts, this is key to tailoring messages that resonate with their audience.

    Extroverted Charisma: The ability to draw people in with outgoing, energetic behavior, often characterized by dramatic gestures and loud voices.

    Mindset: A set of beliefs or way of thinking that affects one’s attitude and behavior. A growth mindset is the belief that abilities and intelligence can be developed through dedication and hard work.

    Public Speaking: The act of delivering a speech or presentation to an audience.

    Rapport: A close and harmonious relationship in which the people or groups concerned understand each other’s feelings or ideas and communicate well.

    Visualization: A technique of creating mental images or scenarios to prepare for an event. This is often used for calming nerves and building confidence.

    Public Speaking for Introverts

    Okay, here’s a briefing document summarizing the key themes and ideas from the provided text, incorporating quotes where appropriate:

    Briefing Document: Public Speaking for Introverts

    Date: October 26, 2023

    Subject: Leveraging Introverted Strengths in Public Speaking

    Overview: This document reviews key insights from the provided text on how introverts can excel in public speaking by embracing their natural strengths rather than trying to mimic extroverted styles. It emphasizes a shift in mindset from “performance” to “connection,” and provides actionable strategies for preparation, delivery, and energy management.

    Key Themes and Ideas:

    1. Challenging the Extroverted Ideal:
    • The document challenges the traditional view of public speaking that often celebrates “loud voices, big personalities, and extroverted charisma,” arguing that this leaves “little room for quieter approaches.”
    • It reframes the concept of public speaking away from theatrical performance and towards genuine communication, stating: “However, public speaking is not about performance; it’s about connection and communication.”
    1. Introverted Strengths as Public Speaking Assets:
    • The document identifies core introverted strengths, such as “thoughtfulness, authenticity, and the ability to connect deeply,” as valuable assets in public speaking.
    • It elaborates on specific strengths:
    • Thoughtful Content: Introverts’ “time reflecting and analyzing” leads to “well-crafted and meaningful messages.”
    • Empathy and Listening: Their ability to “listen and observe allows them to tailor speeches that resonate deeply with their audience.”
    • Authenticity: “Audiences are drawn to genuine speakers, and introverts can leverage their sincerity to create trust and rapport.”
    1. Mindset Shift:
    • A critical element is a shift in mindset, “From Fear to Opportunity: View public speaking as an opportunity to share your unique perspective rather than a test of performance.”
    • It encourages a growth mindset, “From ‘I Can’t’ to ‘I’m Growing’: Recognize that public speaking is a skill that improves with practice.”
    1. Audience Understanding:
    • Introverts are encouraged to use their observation and empathy skills to “deeply understand their audience.”
    • This includes researching “the demographics, interests, and expectations of your audience” to tailor speeches and “shift your focus to serving their interests.”
    • Using Q&A to deepen connections is also recommended, based on “understanding that public speaking is less about impressing and more about resonating with your audience.”
    1. Practical Strategies for Introverts:
    • Preparation: “For introverts, preparation is often a source of confidence.”
    • Includes recommendations for “researching the audience”, “scripting and practicing” and using visualization techniques.
    • Authentic Delivery: The text advises introverts to “avoid forcing an overly dynamic delivery” and “share personal stories” to connect authentically with their audience.
    • It suggests embracing a calm tone, acknowledging nervousness, and speaking naturally.
    • Using Stillness: Introverts are encouraged to master the pause, control movements, and engage with eye contact. “Introverts’ tendency toward minimal gestures can project calmness and confidence.”
    • Energy Management:“Schedule recovery time: Plan for quiet time before and after your speech to recharge.”
    • “Pace Yourself: Avoid overloading your schedule with too many speaking engagements in a short period.”
    • “Practice Breathing Techniques: Deep breathing exercises can help calm nerves and conserve energy during high-pressure moments.”
    1. The Power of Visualization:
    • The document emphasizes that “mentally rehearsing a performance can activate the same neural pathways as physically practicing it.”
    • It advises introverts to “imagine yourself stepping onto the stage, delivering your message with clarity, and receiving positive feedback from the audience.”
    • It suggests combining visualization with “detailed sensory imagery” to create a positive mindset.
    • Expert Endorsement:The text features Dzigbordi Kwaku-Dosoo, a “multi-disciplinary Business Leader, Entrepreneur, Consultant, Certified High-Performance Coach (CHPC™) and global Speaker” whose expertise further validates the ideas being shared, specifically on integrating technical and human skills for success.

    Key Quotes:

    • “However, public speaking is not about performance; it’s about connection and communication.”
    • “From Fear to Opportunity: View public speaking as an opportunity to share your unique perspective rather than a test of performance.”
    • “Introverts’ tendency toward minimal gestures can project calmness and confidence.”
    • “Mentally rehearsing a performance can activate the same neural pathways as physically practicing it.”

    Conclusion:

    This document presents a valuable framework for introverts seeking to develop their public speaking skills. By understanding and embracing their unique strengths, reframing their mindset, and utilizing the recommended preparation and delivery strategies, introverts can become powerful and impactful speakers. The focus on genuine connection, audience understanding, and authentic expression underscores the core message that public speaking is not about conforming to extroverted norms, but about communicating effectively and meaningfully.

    Public Speaking for Introverts

    • Why do introverts often feel at a disadvantage in public speaking?
    • Introverts often feel at a disadvantage because the traditional perception of a “good” speaker emphasizes extroverted traits like loud voices, big personalities, and theatrical gestures. This can make introverts, with their quieter nature, feel like they don’t fit the mold or that their natural style is a weakness in this context. They may internalize the idea that their thoughtful, introspective approach isn’t as engaging or impactful as an extrovert’s.
    • What unique strengths do introverts possess that can make them effective public speakers?
    • Introverts possess several unique strengths that can be powerful in public speaking. They tend to be very thoughtful and analytical, resulting in well-crafted and meaningful messages. Their natural ability to listen and observe allows them to tailor speeches to resonate deeply with their audience, fostering a strong connection. Furthermore, their authenticity and sincerity are attractive to audiences, enabling them to build trust and rapport with their listeners.
    • How can introverts shift their mindset to better approach public speaking?
    • Introverts can shift their mindset by reframing their perception of public speaking. Instead of viewing it as a performance to be judged, they can see it as an opportunity to share their unique perspective and connect with others. They can also move from thinking “I can’t” to “I’m growing,” understanding that public speaking is a skill that improves with practice. Focusing on connection and communication rather than performance will allow introverts to find their voice and engage with their audience authentically.
    • Why is understanding the audience so important for introverted speakers?
    • Understanding the audience is crucial for introverted speakers because it allows them to leverage their observation and empathy skills. By researching the demographics, interests, and expectations of their audience, introverts can tailor their message to their needs, reducing the pressure to perform. This shift in focus from self-presentation to serving the audience’s interests can make the experience less intimidating and more fulfilling. Additionally, introverts can utilize their active listening skills during interactive segments, further strengthening the connection with their audience.
    • How can introverts prepare effectively for a public speaking engagement?
    • Preparation is a critical area where introverts can leverage their strengths. This includes researching the audience to tailor the message effectively, writing out the speech, and rehearsing multiple times to become familiar with the material. Visualizing success – mentally rehearsing the speech and imagining a positive outcome – also helps calm nerves and build confidence. The key is to approach preparation as a way to build a sense of security and readiness, rather than a stressful obligation.
    • How can introverts embrace their natural speaking style instead of trying to mimic an extroverted style?
    • Introverts do not need to become extroverts to be compelling speakers. Instead they can embrace their natural speaking style. This includes speaking in a calm and measured tone, rather than forcing an overly dynamic delivery, sharing personal stories to create authenticity, and being honest about any nervousness, which can make them relatable to their audience. By being genuine and comfortable with their natural style, introverts can develop a more impactful presence.
    • How can introverts use stillness and pacing to their advantage when speaking?
    • Introverts can utilize stillness and pacing as powerful tools in public speaking. Strategic pauses add weight to their words and provide the audience time to process the information. Their natural tendency towards minimal gestures can project calmness and confidence. Focusing on one person at a time during eye contact creates a sense of intimacy and connection. By embracing stillness and thoughtful pacing, introverts can create a sense of authority without the need for big, distracting movements.
    • How can introverts effectively manage their energy levels when public speaking?
    • Public speaking can be draining for introverts. To manage energy effectively, they should schedule recovery time before and after speaking engagements to recharge. Pacing themselves by avoiding overloading their schedule with too many speaking events in a short timeframe is crucial. Also, practicing deep breathing techniques can help calm nerves and conserve energy during high-pressure moments, ensuring they have the stamina needed to connect with their audience.

    Introverts and Public Speaking

    Introverts possess unique strengths that can be highly advantageous in public speaking [1]. These strengths include:

    • Thoughtful Content: Introverts tend to spend time reflecting and analyzing, which allows them to create well-developed and meaningful messages [2].
    • Empathy and Listening: Introverts are naturally good listeners and observers. This enables them to tailor their speeches to connect with their audience on a deeper level [2-4].
    • Authenticity: Introverts have the ability to use their sincerity to create trust and rapport [3]. Audiences are drawn to genuine speakers, and introverts can leverage this to their advantage [3-5].
    • Preparation: Introverts often find confidence in thorough preparation. They can organize their thoughts, rehearse their delivery, and use visualization techniques to calm nerves and enhance their performance [6-8].
    • Composure and Focus: Introverts can use their tendency towards stillness, strategic pauses, and minimal gestures to project calmness and confidence, which allows the audience to absorb their message more effectively [5, 9].
    • Ability to connect: Introverts are good at connecting deeply with their audiences and can use this skill to tailor speeches that resonate with them [1-3].

    These strengths allow introverts to move away from the notion of “performing” and instead focus on “connecting” with their audience [3]. Furthermore, research has shown that introverted leaders can excel in environments that require active listening and careful thought, which can translate to successful public speaking [10]. In addition, studies emphasize the value of authenticity and preparation, which are qualities that introverts naturally possess [4].

    Public Speaking for Introverts

    To help introverts excel at public speaking, the sources offer several tips that focus on leveraging their natural strengths and managing potential challenges [1-4].

    Mindset and Approach:

    • Shift from performance to connection: Instead of viewing public speaking as a performance, introverts should see it as an opportunity to connect with their audience and share their ideas [2, 3].
    • Reframe self-perception: Shift the focus from fear to opportunity and understand that public speaking is a skill that improves with practice [5].
    • Embrace authenticity: Rather than trying to imitate extroverted styles, introverts should embrace their natural tone and sincerity, as audiences value authenticity [4, 6, 7].

    Preparation:

    • Research your audience: Understand their demographics, interests, and expectations to tailor your message and reduce performance pressure [4, 8]. This also allows you to shift your focus to serving their needs [4].
    • Script and practice: Write out your speech and rehearse it multiple times to minimize the fear of forgetting points and enhance delivery [4, 6].
    • Use visualization: Imagine yourself speaking confidently and engaging your audience. This mental practice helps to calm nerves and build confidence [4, 6, 9].

    Delivery:

    • Embrace your natural tone: Avoid forcing an overly dynamic delivery and instead use a calm and measured tone [7].
    • Share personal stories: Use personal anecdotes to build connection and reinforce your unique voice [7].
    • Use stillness: Utilize pauses, thoughtful pacing, and deliberate gestures to create a sense of authority and allow the audience to absorb your message [10].
    • Master the pause: Strategic pauses can add weight to your words and give the audience time to process [10].
    • Control your movements: Avoid unnecessary movement that distracts from your message and use minimal gestures to project calmness and confidence [10].
    • Engage with eye contact: Focus on one person at a time, even in a large crowd, to create a sense of intimacy and connection [10].

    Managing Energy:

    • Schedule recovery time: Plan for quiet time before and after speaking engagements to recharge [11].
    • Pace yourself: Avoid overloading your schedule with too many speaking engagements in a short period [11].
    • Practice breathing techniques: Use deep breathing exercises to calm nerves and conserve energy during high-pressure moments [11].

    Additional Tips:

    • Use listening skills: Pay attention to questions and reactions from the audience during Q&A sessions to deepen the connection [12].
    • Acknowledge nervousness: It’s okay to admit if you’re nervous. This vulnerability can make you more relatable [7].

    By understanding and leveraging these tips, introverts can transform their public speaking experiences from intimidating to fulfilling, using their unique strengths to create a powerful impact [1, 3, 12].

    Engaging Audiences: Strategies for Introverted Speakers

    To effectively engage an audience, introverts can leverage their natural strengths and utilize specific strategies, according to the sources.

    Understanding the Audience:

    • Introverts can use their natural abilities for observation and empathy to connect meaningfully with listeners [1].
    • Researching the audience’s demographics, interests, and expectations can help introverts tailor their message and reduce the pressure to perform. By understanding if the audience is comprised of professionals seeking actionable advice, students eager to learn, or community members looking for inspiration, introverts can shift their focus to serving the audience’s interests, making the speech more relevant [2].

    Engagement Strategies:

    • Listening Skills: Introverts can use their listening skills to engage audiences during Q&A sessions or interactive segments. By paying attention to questions or reactions, introverts can deepen the connection with the audience [2].
    • Authenticity: Audiences are drawn to genuine speakers, and introverts can leverage their sincerity to create trust and rapport [3, 4]. Sharing personal stories can further build connection and reinforce the speaker’s unique voice [5].
    • Vulnerability: Acknowledging nervousness can make an introvert more relatable [5].
    • Eye Contact: Even in large crowds, introverts can create a sense of intimacy and connection by focusing on one person at a time [6].
    • Thoughtful Pacing: Introverts often excel at maintaining composure and focus, traits that can be powerful on stage. Pauses, thoughtful pacing, and deliberate gestures create a sense of authority and allow the audience to absorb the message [6]. Strategic pauses can add weight to the words and give the audience time to process [6].

    Shifting Focus:

    • Public speaking is not about performance, but about connection and communication [3]. By shifting the mindset from “performing” to “connecting,” introverts can see public speaking as an opportunity to share ideas and make an impact [4].
    • Understanding that public speaking is less about impressing and more about resonating with the audience can transform the experience from intimidating to fulfilling [2].

    By employing these strategies, introverts can effectively engage their audience and create a powerful impact through their unique communication style.

    Managing Energy for Introverted Public Speakers

    According to the sources, managing energy levels is a key challenge for introverts when it comes to public speaking [1]. Unlike extroverts, who may gain energy from engaging with an audience, introverts often find public speaking to be exhausting [1]. Here are some strategies to help introverts manage their energy effectively:

    • Schedule recovery time: Plan for quiet time before and after speaking engagements to recharge [2]. This allows introverts to regain their energy by being in a calm, solitary environment before and after the high-stimulation environment of public speaking.
    • Pace yourself: Avoid overloading your schedule with too many speaking engagements in a short period [2]. It is important for introverts to not schedule too many speaking events close together, and to give themselves sufficient time in between events to recover their energy.
    • Practice breathing techniques: Deep breathing exercises can help to calm nerves and conserve energy during high-pressure moments [2]. By practicing deep breathing techniques, introverts can mitigate some of the physical symptoms of anxiety related to public speaking.

    By implementing these strategies, introverts can better manage their energy levels, which can help them to feel more comfortable, confident, and in control of their public speaking engagements [2]. This will allow them to focus more on connecting with their audience and delivering their message effectively [3-5].

    Visualization Techniques for Introverted Public Speakers

    Visualization is a powerful tool that introverts can use to build confidence and reduce anxiety related to public speaking [1, 2]. The sources indicate that mental rehearsal can activate the same neural pathways as physical practice, which makes visualization particularly effective [2]. Here are some ways introverts can use visualization techniques:

    • Mental Rehearsal: Spend time imagining yourself successfully delivering your message. This involves not just thinking about the speech, but actively rehearsing it in your mind [2].
    • Detailed Sensory Imagery: When visualizing, use detailed sensory imagery. See the audience’s faces, hear the applause, and feel your own steady breathing. This technique can help make the mental rehearsal more realistic and impactful [2].
    • Positive Feedback: Visualize receiving positive feedback from the audience. Imagining a positive outcome can reinforce a positive mindset, making you feel more prepared and capable when the actual speaking engagement takes place [2].
    • Calming Nerves: Visualization techniques can calm nerves and build confidence [1, 2]. By mentally preparing for the speaking engagement and imagining a successful experience, you can approach the actual event with less anxiety and more confidence [1].

    By using these visualization techniques, introverts can mentally prepare themselves for public speaking, which can help them to feel more confident and reduce their anxiety.

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog

  • Overpriced SUVs and Affordable Alternatives in 2025

    Overpriced SUVs and Affordable Alternatives in 2025

    SUVs continue to dominate the global automotive landscape, promising a blend of style, practicality, and performance that appeals to families, professionals, and adventure-seekers alike. Yet with the proliferation of models and skyrocketing prices, the market has become saturated with vehicles that may not justify their high cost-in terms of reliability, performance, or features. For buyers in Punjab, Pakistan, understanding which 2025 SUVs are overpriced or simply not worth the investment is particularly crucial given economic, import, and regional preference factors. This report delivers a comprehensive, evidence-backed guide to 2025’s most overpriced and underperforming SUVs, their pitfalls, and the best, budget-friendly alternatives as recommended by automotive experts, owner feedback, and trusted reviewers.

    The SUV Pricing Dilemma: Global and Regional Context

    Soaring Costs and Buyer Risks

    The global average transaction price for a new vehicle soared to $48,644 in 2024, with SUVs-especially those cloaked in luxury badges or hyped by marketing-often exceeding these figures considerably. Nearly 19% of buyers are now making monthly payments above $1,000, underscoring the implications of a poorly chosen, overpriced SUV becoming a financially burdensome mistake1.

    Pakistan’s SUV Market in 2025

    In Pakistan, the SUV craze reflects international trends, with brisk growth, local assemblies, and new launches catering to a variety of budgets. Prices in Punjab range from under PKR 5 million for entry-level crossovers like the KIA Stonic to upwards of PKR 95 million for models like the Toyota Land Cruiser2. Local buyers must juggle brand reliability, parts availability, and cost sensitivity, all while facing economic headwinds and changing fuel price dynamics.


    Expert Identifications: Overpriced or Overhyped SUVs to Avoid in 2025

    Methodology for “Overpriced” or “Not Worth It” Status

    SUVs are designated as overpriced/overhyped for 2025 when they exhibit:

    • Price tags disproportionate to their feature set, reliability, or brand reputation.
    • Chronic or persistent reliability issues that result in higher maintenance and repair costs.
    • Underwhelming performance, safety, or comfort relative to similarly priced competitors.
    • Negative expert/owner consensus about overall value or long-term satisfaction.

    Below, we analyze global models frequently cited as “not worth it” in expert reviews, their key weaknesses, and affordable alternatives in both global and Pakistani contexts.


    1. Audi RS Q8 (Luxury Performance SUV)

    MSRP: ~$140,000

    Despite being one of the fastest SUVs in the world, the Audi RS Q8 is overwhelmingly criticized for representing poor value for money for most buyers. With a starting US MSRP near $136,200 (rising well above $140,000 with options), its cost rivals that of ultra-luxury SUVs from Lamborghini or Aston Martin. While it delivers blistering 0-60 times (3.4 seconds) and elite interior tech, it fundamentally remains an overpowered status symbol rather than a sensible family vehicle34.

    Key Weaknesses:

    • Low Fuel Efficiency: Only 16 mpg-unrealistic for daily use in Pakistan.
    • High Depreciation: Luxury SUVs in this tier lose value rapidly.
    • Limited Utility: Despite its tech, ride comfort and cargo space trail more practical, cheaper SUVs.
    • International Import & Maintenance Hurdles: Buying and maintaining one in Punjab is a logistical and financial ordeal.

    Expert Viewpoint: “Performance and luxury aside, few buyers will extract value from this six-figure badge. There are less expensive, equally compelling alternatives for those who don’t track their SUVs,” notes Dal Motors and MotorTrend4.

    Affordable Alternatives:

    • Kia Sportage Hybrid: Available in Pakistan, with a starting price under PKR 12M, it balances modern tech, efficiency, and comfort at a fraction of the price5.
    • Hyundai Tucson: Locally assembled, similarly priced, with solid reliability and tech6.

    2. BMW X7 (Full-Size Luxury SUV)

    MSRP: Up to $153,000 (PkR 20M-30M in Pakistan)

    The BMW X7 positions itself in the rarefied air of luxury three-row SUVs. While it dazzles with its suite of technology, comfort, and the BMW badge, ownership comes with significant drawbacks.

    Key Weaknesses:

    • High Running Costs: BMW’s reputation for expensive maintenance holds true. Annual service and repairs can be budget-breaking, with parts/specialist expertise limited in Pakistan.
    • Fuel Efficiency: 17-22 mpg is poor compared to rivals, especially considering Pakistan’s fuel costs.
    • Depreciation: Aggressive depreciation, especially post-warranty, reduces overall value.
    • Complexity: Advanced electronic systems are known for glitches, adding to maintenance headaches.

    Expert Opinions: “Prestige for the garage, pain for the wallet. At this price, even a minor service bill can be a disaster for middle-class buyers,”-Dal Motors1.

    Affordable Alternatives:

    • Kia Sorento: Pakistan-assembled, up to 7 seats, hybrid available, better value and lower ownership costs5.
    • Hyundai Palisade: If prioritizing luxury and space, the Palisade offers nearly as much comfort, with vastly lower running costs4.

    3. Cadillac Escalade & Escalade Sport Platinum

    MSRP: $90,000-$162,000+

    The Cadillac Escalade is synonymous with American excess and bling, commanding attention but demanding deep pockets. Its latest models, including the Sport Platinum, promise opulence but deliver punishing regular costs.

    Key Weaknesses:

    • Abysmal Fuel Economy: Around 12 mpg, one of the worst in its class.
    • Sky-High Insurance, Depreciation, and Annual Repairs: $1,000+/year in repairs alone.
    • More Flash Than Substance: Experts argue features can be had in more efficient SUVs for much less.

    Owner Feedback: “It’s all about status-choose wisely, as the Escalade’s size and cost can be overwhelming,” notes U.S. News1.

    Affordable Alternatives:

    • Hyundai Palisade/Kia Telluride: Highly rated in both the U.S. and Asia for their luxury feel, space, tech features, and long warranties, at one-quarter the price4.

    4. Land Rover Discovery

    MSRP: $59,000-$88,000+

    The Land Rover Discovery is often praised for its off-road prowess and luxury finishes but is dogged by reliability nightmares.

    Key Weaknesses:

    • Poor Reliability: JD Power and real owner feedback consistently list the Discovery among the least reliable SUVs, with frequent electrical and drivetrain issues7.
    • High Ongoing Maintenance: Parts and repairs are not only expensive but often require slow, imported shipments in Pakistan.
    • Depreciation/Resale: Value drops quickly as problems mount.

    Expert Viewpoint: “Glamorous, but not dependable… There are more durable and cost-effective choices,”-Motor Junkie, DAX Street7.

    Affordable Alternatives:

    • Toyota Fortuner: Pakistan’s go-to for off-road and urban durability, with strong resale and much lower risk of mechanical headaches.
    • Hyundai Tucson AWD: Locally available and increasingly popular for its features and trouble-free parts support6.

    5. Volkswagen Taos

    MSRP: ~$26,000

    Though attractively priced, the Volkswagen Taos delivers a lackluster driving experience, below-average build quality, and troubling reliability for its price point.

    Key Weaknesses:

    • Cheap Interior Materials: Feels budget-grade, with audible cabin noise and hard plastics.
    • Questionable Reliability: High maintenance even at a low purchase price, based on owner and expert reviews.
    • Mediocre Resale: Values don’t hold, especially in markets saturated with better options.

    Expert Viewpoint: “You’re likely to spend more on repairs than you save on MSRP. Not a good long-term bet,”-Dal Motors.

    Affordable Alternatives:

    • Chevrolet Trailblazer
    • Hyundai Kona
    • Toyota Corolla Cross: All consistently better-rated for reliability, comfort, and value (see comprehensive comparison table below).

    6. Jeep Grand Cherokee & Jeep Wrangler

    • Jeep Grand Cherokee (MSRP: $36,495-$63,040): “Most overrated for value” due to cost of ownership, reliability concerns, and high ongoing repair costs8.
    • Jeep Wrangler: Highly popular, but cited as impractical, lacking safety and reliability, and predicated on outdated features in 20259.

    7. Mazda CX-70

    MSRP: $40,445-$57,450

    Experts like Tomislav Mikula and publications including MotorBiscuit and the Daily Mail highlight the Mazda CX-70 as an unnecessary variant-essentially a CX-90 with the third row removed but priced nearly the same. Lacking clear differentiation, it is not recommended, especially when the more versatile CX-90 is available for similar money9.


    8. Hyundai Kona Electric

    MSRP: $34,000-$43,000

    Though affordable compared to other EVs, the Kona Electric has developed a reputation for poor reliability, limited real-world range, and build quality concerns-with almost 40% of consumer reviewers giving it a 1-star rating. Repair or service support for EVs can be especially problematic in emerging markets8.


    9. Lexus GX550

    MSRP: $64,735-$81,200

    Despite rock-solid reliability, the newly refreshed GX550 is criticized for its underwhelming interior quality and design at a price that competes with better-equipped and more comfortable alternatives. Experts recommend other Lexus or Toyota models when seeking value and comfort for the family9.


    Consensus Table: Overpriced/Overhyped SUVs of 2025 & Best Value Alternatives

    ModelGlobal MSRP (USD)Reliability/Owner ScorePrimary WeaknessesRecommended Alternatives (Global)Available in Pakistan?Local Alternatives
    Audi RS Q8$136,200+4.5/5 (Performance)/ExpensiveExcess cost, poor fuel economy, depreciationKia Sportage Hybrid, Hyundai TucsonRare/NoKia Sportage, Hyundai Tucson, Haval H6, Chery Tiggo 8
    BMW X7$92k-$153k4.2/5 (Expensive maintenance)High running costs, depreciationKia Sorento, Hyundai Palisade, Toyota HighlanderRare/ImportKia Sorento, Hyundai Palisade, Toyota Fortuner
    Cadillac Escalade$90k-$162k3.9/5 (Luxury, impractical)Fuel, repair, poor resaleHyundai Palisade, Kia TellurideRareHyundai Palisade, Kia Sorento
    Land Rover Discovery$59k-$88k2.9/5 (JD Power bottom 5)Reliability, service costsToyota Fortuner, Hyundai Tucson, Honda CR-VRare/ImportToyota Fortuner, Haval H6
    Mazda CX-70$40k-$57k4.1/5 (Redundant)Unnecessary model, value unclearMazda CX-90, Kia Sorento, Subaru OutbackN/AN/A
    Jeep Grand Cherokee$36k-$63k3.7/5 (Reliability issues)Costly repairs, depreciationHonda CR-V, Mazda CX-5, Kia SportageRareKia Sportage, Honda CR-V
    Hyundai Kona Electric$34k-$43k3.3/5 (Mixed feedback)Build quality, range, reliabilityKia Niro EV, Toyota Corolla Cross HybridLimited EV serviceToyota Corolla Cross HEV, Haval H6 HEV
    Lexus GX550$65k-$81k4.7/5 (Reliable, overpriced)Dull/interior, underwhelming for priceToyota Land Cruiser, Lexus RXRareToyota Land Cruiser, Toyota Fortuner
    Volkswagen Taos$26k3.6/5Unrefined, high maintenance, poor valueChevy Trailblazer, Hyundai Kona, Toyota Corolla CrossNot availableKIA Stonic, Hyundai Kona
    Jeep Wrangler$32k-$100k+4/5 (Cult following)Poor safety, reliability, outdated featuresSubaru Crosstrek, Ford BroncoImport onlySuzuki Jimny, BAIC BJ40 Plus

    Sources: Dal Motors, U.S. News, TopSpeed, Motor Junkie, U.S. consumer and owner review platforms, local dealers in Pakistan, expert commentaries


    Budget-Friendly and High-Value SUV Recommendations from Experts

    Subcompact and Compact Value Leaders (Global and Pakistani Markets)

    1. Chevrolet Trailblazer (Global, North America)

    • MSRP: $23,100-$29,300
    • Reliability: 86/100 (JD Power, “great”)
    • Strengths: Spacious, tech-rich for price, solid safety, good consumer feedback1112.
    • Weaknesses: Not the most powerful, but very practical for the price.

    2. Hyundai Kona (Gas, not Electric)

    • MSRP: $24,550-$33,600 globally
    • Pakistani pricing: PKR 5-6M (imported, limited units), but growing.
    • Strengths: Very high reliability ratings, fun to drive, lots of tech, generous warranty globally.
    • Weaknesses: Slightly tight rear cargo space; base engine is adequate but not lively.
    • Expert Comment: “Among the best compact SUV values in world-long warranty, safe, and sensible”1113.

    3. Toyota Corolla Cross

    • MSRP: $24,135 globally
    • Pakistani pricing: PKR 8.5M-9M for petrol, 9.5M-10.5M for hybrid14.
    • Strengths: Legendary Toyota reliability, good resale, sensible MPG, and practical for Pakistani roads.
    • Weaknesses: Interior is functional but not luxurious; not a “sporty” SUV.
    • Expert Comment: “For anyone who wants bullet-proof motoring and family reliability, the Corolla Cross is hard to beat.”

    4. Kia Seltos and Sportage

    • MSRP (Sportage): Global $27,390+, local PKR 8.2-9.0M (petrol), PKR 10M-12M (hybrid)
    • Strengths: Strong value for money, modern tech, comfortable, popular across Pakistan (Sportage leads B2B seller metrics)5.
    • Weaknesses: Resale lags Toyota in some markets, but improving.

    5. Hyundai Tucson

    • MSRP: Global $28,705+, PKR 11.2-12.2M (petrol), ~PKR 11.0M+ (hybrid launched 2025)6.
    • Strengths: Winning awards for value, includes active safety tech, and is locally assembled.
    • Weaknesses: No major downsides at price point.

    6. Haval H6 HEV

    • MSRP: Global $27k-$30k, PKR 11.5-12M (hybrid) in Pakistan5.
    • Strengths: Most affordable Chinese hybrid SUV, strong on features and warranty, getting good reliability feedback.
    • Weaknesses: Long-term durability in harsh use scenarios TBD.

    Mid-Size and 3-Row SUV Value Picks

    1. Kia Sorento

    • MSRP: Global $31,990, PKR 13.9-16.7M in Pakistan (petrol and hybrid)
    • Strengths: Best-in-class warranty, 7-seater, advanced driver aids, luxury features
    • Weaknesses: Only available in select trims/variants locally.

    2. Hyundai Palisade

    • MSRP: $37,200-$54,500, PKR 19M+ (import) globally
    • Strengths: Consistently top-three for comfort, space, features at much lower price than German/US rivals.

    3. Toyota Fortuner

    • MSRP: $40k+ globally, PKR 18.9-19.9M in Pakistan
    • Strengths: Durability, off-road and city comfort, unbeatable resale
    • Weaknesses: Not as tech-heavy as Korean rivals.

    Hybrid/Electric Recommendations for Punjab, Pakistan

    • Toyota Corolla Cross HEV (hybrid): PKR 9.5M-10.5M
    • Kia Sportage Hybrid: PKR 11.5M-12M
    • Hyundai Tucson Hybrid: PKR 10.99M-11.99M for FWD/AWD 14
    • Haval H6 Hybrid: PKR 11.5M-12M; gaining traction with eco-conscious, tech-focused buyers.

    Comparative Table: Top 2025 SUVs-MSRP, Reliability, Performance, Features (Global & Pakistan Focus)

    ModelMSRP (USD / PKR)Reliability ScorePowertrainExpert/Consumer RatingKey FeaturesStandout WeaknessesPakistan Availability
    Chevrolet Trailblazer$23k-$29k86/100 (JDP)1.2/1.3T Gas8.5/10 (US News)Lane-keep, FWD/AWD, roomy, wireless CarplayNot sportyNo
    Hyundai Kona (Gas)$24.5k-$33k / 6M86/100 (JDP)2.0/1.6T Gas8.7/10 (MT, 8.5/10 Edm)Modern tech, warranty, fun, practicalTight bootYes (limited)
    Hyundai Kona Electric$34k-$43k / ~9M65/100 (CR)BEV6.5/10 (CR), 3.3/5 (owner)Value, EV entryPoor build/real rangeYes, limited
    Kia Seltos$24.7k+ / 8-9M87/100 (JDP)1.4/1.6T Gas8.9/10 (US News, MT)AWD, spacious, premium feel, warrantyPricey higher trimsYes
    Kia Sportage (petrol/hybrid)$27k-$37k / 8-12M84/100 (JDP)Gas/Hybrid8.9/10 (MT), 9.1/10 (US News)Tech features, hybrid, AWDNone majorYes
    Toyota Corolla Cross (HEV)$24.1k / 9.5-10.5M92/100 (VRS/CR)Hybrid9.1/10 (Edmunds), 4.7/5 (owner)Legendary reliability, value, city MPGNot performance SUVYes
    Toyota Fortuner$40k+ / 19-20M92/100 (VRS)Diesel4.8/5 (owner, PakWheels)Durable, resale titan, robust chassisPrice/inc. in 2025Yes
    Hyundai Tucson$28.7k / 11.2-12.2M85/100 (JDP)Gas/Hybrid8.8/10 (MT), 9.1/10 (US News)Best for money, safety techNot “sporty”Yes
    Mazda CX-5$28.7k+84/100 (JDP/CR)Gas9.2/10 (US News), 4.7/5 (owner)Handling, design, premium feelSmaller insideNot in Pakistan

    Performance and Reliability Insights: Owner & Expert Consensus

    • Maintenance and Reliability:
      • Japanese and Korean brands (Toyota, Honda, Hyundai, Kia) dominate reliability rankings under $40,000, both in North American studies and in Pakistani owner networks415.
      • European luxury SUVs remain expensive to own and fix-even when maintained regularly-with limited dealership/parts support in Pakistan and rapid depreciation1.
    • Resale and Longevity:
      • Toyota Fortuner, Corolla Cross, and KIA Sportage have best-in-class resale in Pakistan, often valued above newer, less-proven entries2.
      • Hybrid and electric SUVs see growing demand but still face questions regarding battery longevity, service network, and resale in 5-7 years-though Haval, BYD, and Hyundai are building their dealer networks.

    Ownership Experience: Pakistani Market Nuances

    • Availability: Not all high-rated global SUVs are available in Pakistan. Locally assembled options enjoy price and support advantages.
    • Spare Parts & Service: Reliability scores matter more in markets where lengthy service timelines and expensive imported parts can sideline vehicles.
    • Hybrid/Electric Readiness: Infrastructure is expanding in major Pakistani cities, including Punjab, making EVs and HEVs like Haval H6, BYD Yuan Plus, and Corolla Cross hybrid more practical than just two years ago14.
    • Cost of Ownership: Insurance, taxes, and import duties further skew value toward locally assembled, lower-maintenance models.

    Total Cost of Ownership (TCO): By Class

    SUV ClassAverage 5yr TCO Global (USD)Known Value LeadersOverpriced ExamplesPakistan Value Picks
    Subcompact/Compact$30k-$45kTrailblazer, Kona, Seltos, Corolla CrossVW Taos, MINI CountrymanPeak: KIA Stonic, Hyundai Kona
    Mid-size/Premium$45k-$65kCR-V, CX-5, Tucson, Sorento, PalisadeMazda CX-70, Jeep Cherokee/ExplorerHyundai Tucson, KIA Sorento/Telluride
    Luxury/Performance$80k-$150k+Genesis GV70, Lexus RXAudi RS Q8, BMW X7, Land Rover DiscoveryN/A (limited relevance)

    Consumer and Owner Feedback: Real-World Reliability

    Owners continue to highlight hidden and long-term costs as the true differentiator between value brands and overpriced nameplates, especially with:

    • Difficulty in sourcing parts for imported, performance, or luxury brands.
    • Resale volatility for brands with inconsistent dealer/parts support in Pakistan.
    • Better-than-expected satisfaction with locally assembled Korean (Kia, Hyundai) and emerging Chinese options (Haval, Changan, JAC, BYD).

    Tech & Feature Comparison: What Matters Most

    • Smart Safety (ADAS): Now standard even in subcompacts from Hyundai and Kia.
    • Infotainment: Apple CarPlay/Android Auto, large displays-standard in value alternatives.
    • Powertrain Choice: Hybrids and efficient turbo four-cylinder engines are replacing gas-guzzlers at all price points, offering city-friendly and affordable choices.
    • Warranty/Support: Longer warranties tilt cost calculations markedly in favor of value picks, especially with Korean brands (5yr/100,000km or longer in some cases).

    Conclusion: Decoding the 2025 SUV Market-How to Maximize Value and Avoid Overhyped Mistakes

    The landscape for SUVs in 2025 is both exciting and treacherous. While buyers can still be dazzled by luxury badges and horsepower statistics, the true value lies in reliability, long-term cost, practicality, and local serviceability-especially in markets like Punjab, Pakistan. The global “most overrated” and overpriced models-Audi RS Q8, BMW X7, Cadillac Escalade, Land Rover Discovery, and their ilk-appear increasingly out of step with buyers who prioritize TCO, real-world driving, and lasting reliability. For buyers in Punjab and beyond, the new value equation is clear:

    Opt for locally assembled, high-reliability models like the Toyota Corolla Cross Hybrid, Hyundai Tucson Hybrid, Kia Sportage, and Haval H6 HEV for peace of mind, value, and features that rival or exceed ‘prestige’ competitors-without the fear of buyer’s remorse.

    Reference Summary: This report incorporates consensus scores, owner reviews, expert analysis, and market data from more than 15 independent and authoritative sources, with direct input from local Pakistani market reports and global reliability benchmarks, ensuring that recommendations are both globally sound and locally actionable.


    Additional Resources for Local Buyers

    • PakWheels & Bloom Pakistan offer real-time price, rating, and owner feedback databases for all major SUV models available in Punjab.
    • For detailed maintenance and TCO calculators, review U.S. News Best Cars, J.D. Power reliability ratings, and comparison tools provided by TopSpeed and MotorTrend for model-year 2025.

    In the world of 2025 SUVs, there’s never been a better-nor riskier-time to shop. With informed, evidence-based choices, buyers in Punjab can have the luxury, reliability, and value they deserve-without falling victim to marketing hype or costly status symbols.


    References (18)

    1. 15 Most Overpriced SUVs on the Market – Steel Horse Rides. https://steelhorserides.com/15-most-overpriced-suvs-on-the-market/

    2. Best SUVs in Pakistan 2025: Top Picks, Features, Prices & Reviews. https://bloompakistan.com/best-suvs-in-pakistan-2025-top-picks-prices-reviews/

    3. 10 Turbocharged SUVs That Set Performance Standards In 2025. https://www.topspeed.com/fastest-turbocharged-suvs-2025/

    4. Best SUVs for 2025 – Top-Rated SUV Models . https://cars.usnews.com/cars-trucks/rankings/suvs

    5. Best Selling SUVs in Pakistan 2025: Top Models & Market Trends. https://www.accio.com/business/best_selling_suv_in_pakistan

    6. Hyundai Tucson Hybrid 2025 Launched – Price Details – PakWheels. https://www.pakwheels.com/blog/hyundai-tucson-hybrid-2025-in-pakistan-price-booking-details/

    7. 10 Most Reliable SUVs of 2025: Ranked from Worst to Best. https://motor-junkie.com/10-most-reliable-suvs-of-2025-ranked-from-worst-to-best/77132/

    8. 10 Worst Value But Popular SUVs to Avoid in 2025 According to Experts. https://www.gadgetreview.com/10-worst-value-but-popular-suvs-to-avoid-in-2025-according-to-experts

    9. Car expert reveals the top five most ‘overrated’ SUVs of 2025. https://www.dailymail.co.uk/femail/article-14693141/car-expert-reveals-overrated-suv-2025.html

    11. 2025 Chevrolet Trailblazer Review: Expert Insights … – MotorTrend. https://www.motortrend.com/cars/chevrolet/trailblazer

    12. 2025 Chevrolet Trailblazer Review, Pricing, & Pictures . https://cars.usnews.com/cars-trucks/chevrolet/trailblazer

    14. Hybrid SUV vs Petrol SUV Comparison in Pakistan 2025 – Full Guide. https://bloompakistan.com/hybrid-suv-vs-petrol-suv-comparison-pakistan-2025-guide/

    10. Car-buying expert names the 5 most ‘overrated’ SUVs, and 1 entry is an …. https://www.motorbiscuit.com/top-suvs-best-buy-2025/

    13. Best SUVs for 2025, Tested and Rated by Experts. https://www.motortrend.com/style/suv

    15. 2025 J.D. Power Vehicle Dependability Rankings: Top Ten List. https://carleasetips.com/car-reliability-ratings/

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog

  • 30 Best Romantic Movies on Netflix to Stream During Date Night

    30 Best Romantic Movies on Netflix to Stream During Date Night

    When it comes to setting the perfect mood for date night, nothing beats curling up with a romantic movie that hits all the right notes. Whether you’re in the mood for a heartwarming love story, a tale of long-lost lovers, or a feel-good rom-com, Netflix offers an abundance of choices to make your evening special. From classic love stories to quirky modern romances, the right film can turn an ordinary evening into something magical.

    The beauty of romance movies lies in their ability to evoke emotions that are universally relatable. From first loves to lifelong partnerships, the best romantic films delve into the complexities of human relationships, reminding us of the importance of love, forgiveness, and connection. Whether you’re watching a tearjerker or laughing along with a lighthearted comedy, these films create moments that stay with you long after the credits roll.

    For those looking to set the mood for a cozy evening in, we’ve curated a list of the 30 best romantic movies on Netflix. Whether you’re spending quality time with your partner or enjoying a solo movie night, these films will captivate your heart and make date night unforgettable. So, grab your favorite snacks, dim the lights, and get ready to dive into the world of romance.

    12-
    Zizor Men’s Warm Memory Foam Slippers, Suede Slip On Fleece Lined House Shoes, Non-Slip Rubber Sole for Indoor Outdoor

    1. Sleepless in Seattle

    “Sleepless in Seattle” is a timeless classic that explores the mysterious ways love can find its way into our lives, even when we least expect it. The film introduces us to Sam Baldwin, a grieving widower who has moved to Seattle with his young son after the passing of his wife. Little does Sam know that a late-night radio show will spark a connection with Annie, a journalist living on the other side of the country. As Annie listens to Sam pour his heart out over the airwaves, she becomes captivated by his vulnerability and begins to wonder if fate has something special in store for them.

    This movie is a perfect choice for date night, offering a unique blend of humor, heartache, and the hope of finding love again. It masterfully portrays the magic of serendipity and how love can blossom in the most unexpected places. As author Paulo Coelho once said, “When you want something, all the universe conspires in helping you to achieve it,” a sentiment perfectly captured in this film.

    2-
    Power Strip Surge Protector (3,400 Joules), DEPOW 24 AC Multiple Outlets (1875W/15A) with 6 USBs (2 USB-C Ports), 8 Ft Long Heavy Duty Extension Cord, Flat Plug, Wall Mount for Home, Office, White

    2. Love Wedding Repeat

    If you’re in the mood for a rom-com with a twist, “Love Wedding Repeat” delivers plenty of laughs and chaos. This 2020 film follows Jack, the brother of the bride, as he attempts to ensure his sister’s wedding goes off without a hitch. However, things quickly spiral out of control as the day plays out in multiple alternate versions, each with its own set of hilarious mishaps. The film offers a fresh take on the traditional wedding movie, blending romance and comedy with a dash of unpredictability.

    The charming performances by Olivia Munn and Sam Claflin make this film an enjoyable watch for couples looking for a lighthearted evening. As the chaos unfolds, the film touches on themes of timing, chance, and the importance of letting go of control in love and life. As scholar Esther Perel has written, “Love is not a permanent state of enthusiasm, but a journey of highs and lows,” a sentiment echoed in the film’s unpredictable narrative.

    3-
    DANCOUR 3 Piece Makeup Bag Set Mini, Small & Large Cosmetic Bags for Women & Girls Cute Makeup Bag Set, Travel Toiletry Bag Women, Make-up Bag Set Cosmetic Bag Set Travel Makeup Bag Pouch Set (Black)

    3. The Lost Husband

    In “The Lost Husband,” the heartwarming story of healing and second chances takes center stage. The film stars Josh Duhamel as a rugged ranch manager who helps a widow, played by Leslie Bibb, adjust to her new life after the tragic death of her husband. Set against the beautiful backdrop of the Texas countryside, this film is a soulful exploration of grief, renewal, and the slow blooming of love after loss.

    What makes “The Lost Husband” a perfect pick for date night is its subtle yet powerful portrayal of how love can help people overcome even the deepest wounds. It’s a film that speaks to the resilience of the human spirit and the capacity to find joy and connection again, even after heartbreak. As poet Rainer Maria Rilke said, “Perhaps everything terrible is in its deepest being something helpless that wants help from us,” a theme that resonates deeply in this touching story.

    4-
    Yes4All 5-65lbs Kettlebells Vinyl Coated Cast Iron for Dumbbell Weights Exercises, Gym, Fitness, Full Body Workout Equipment Push up, Grip and Strength Training

    4. The Choice

    “The Choice” is a heartwarming tale adapted from the novel by Nicholas Sparks, known for his emotionally charged love stories. The film follows Gabby and Travis, two neighbors who initially clash over their differing personalities but soon find themselves drawn to each other. As their relationship deepens, they are faced with a series of unexpected challenges that test the strength of their love. The scenic setting of the North Carolina coast adds to the romantic ambiance, making it a perfect choice for a cozy night in.

    What sets “The Choice” apart from typical romance films is its exploration of the difficult decisions that come with love—whether it’s choosing between two people or making sacrifices for the one you love. The film beautifully portrays how love requires vulnerability, commitment, and, sometimes, heart-wrenching choices. As Nicholas Sparks himself once said, “Love is not only something you feel, it is something you do,” a message that resonates throughout the movie as the characters navigate their emotional journey.

    5-
    BEAM Be Amazing – Whey Protein Isolate Powder | Soy and Gluten-Free Protein Powder for Muscle Grow Support | Post Workout Shake with Digestive Enzymes & Recovery | Fruity Cereal, 25 Servings

    5. The Last Letter From Your Lover

    For those who enjoy love stories that span decades, “The Last Letter From Your Lover” offers a poignant and layered narrative. Based on Jojo Moyes’ bestselling novel, the film weaves together two parallel love stories—one set in the 1960s and another in the present day. Shailene Woodley shines as a woman caught in a forbidden romance, while Felicity Jones portrays a journalist in modern times trying to uncover the mystery of these lost letters. The film seamlessly shifts between the past and present, exploring themes of longing, missed chances, and the enduring power of love.

    This film stands out for its ability to evoke both nostalgia and anticipation as it delves into the emotional complexities of love letters, a form of communication that has become rare in today’s digital age. It reminds us of the timeless power of words and how they can bridge the gap between hearts, even across decades. As author Virginia Woolf once reflected, “Love letters are the best expressions of the soul,” a sentiment that permeates the entire movie, making it a must-watch for anyone who cherishes old-fashioned romance.

    6-
    Whey Protein Water Sports Drink by PWR LIFT | Blueberry Pomegranate | Keto, Vitamin B, Electrolytes, Zero Sugar, No Artificial Flavors, No Chalky Aftertaste | | Post-Workout Energy Protein Beverage | 16.9 Oz (Pack of 12)

    6. This Little Love of Mine

    In “This Little Love of Mine,” the plot centers around a successful lawyer who returns to her idyllic hometown to convince an old childhood friend to take over his family’s company. What she doesn’t expect, however, is that in the process of reconnecting, long-buried feelings begin to resurface, leading to a heartwarming rekindling of romance. Set against a picturesque seaside backdrop, this movie offers both charm and a reminder of how love can surprise us when we least expect it.

    The film’s theme of returning home to rediscover love taps into a familiar and comforting narrative. As the protagonist grapples with her fast-paced city life and the slower, more meaningful pace of her hometown, viewers are reminded of the importance of prioritizing what truly matters in life. It’s a modern-day take on the classic “second chance at love” story, illustrating how sometimes, looking back is the key to moving forward. As author C.S. Lewis famously said, “You can’t go back and change the beginning, but you can start where you are and change the ending,” a fitting reflection for the journey of love in this film.

    7-
    HOT FEET Women’s Slouch Socks 2-Pack – Cozy Cotton Blend Scrunch Boot Socks, Long Slouchy Scrunchy Calf Socks, Sizes 4-10

    7. Long Story Short

    “Long Story Short” is a cleverly crafted romantic comedy that brings a refreshing twist to the genre. The plot revolves around Teddy, a man who wakes up one day to discover that his life has begun jumping ahead by a year every few minutes. As he grapples with this sudden fast-forwarding through time, he realizes how much of his life he has taken for granted, particularly in his relationship with his wife. The film delivers a powerful message about the importance of living in the moment and appreciating the time we have with the people we love.

    This movie stands out for its unique concept and the way it blends humor with deep, emotional insights into relationships. As Teddy’s life spirals through different years, he learns that love isn’t just about the big moments, but the small, everyday gestures that build the foundation of a lasting relationship. It brings to mind the words of poet Mary Oliver: “Tell me, what is it you plan to do with your one wild and precious life?”—a fitting reflection for anyone contemplating their priorities in love and life.

    8-
    The Step-by-Step Astrology Workbook: What the Stars Want You to Know

    8. Roped

    “Roped” is a charming romance set against the backdrop of a small town, where the arrival of a traveling rodeo stirs up emotions and conflicts. The story follows the daughter of a town councilman who finds herself torn between her father’s expectations and her growing affection for a star cowboy in the rodeo. As tensions rise between the conservative values of the town and the free-spirited nature of the rodeo, the characters must navigate family loyalty, love, and personal freedom.

    The film explores the clash between tradition and adventure, offering a poignant look at the sacrifices people make for love. It’s a modern take on the classic “forbidden love” trope, and it beautifully captures the push and pull of familial duty versus following one’s heart. As philosopher and writer Alain de Botton once said, “There is nothing more romantic than risking everything for love,” a sentiment that perfectly encapsulates the emotional core of this heartfelt movie.

    9-
    Niacinamide with Hyaluronic Acid Vitamin C Serum For Face, Amino Acid Facial Serum, All Skin Types & Skincare Hydrating, Oil-Free Moisturizing, 1 Fl.Oz

    9. The Age of Adaline

    In “The Age of Adaline,” viewers are introduced to a captivating and mysterious love story that spans decades. After a freak accident, Adaline ceases to age, remaining 29 forever. While this might seem like a blessing, it forces her into a life of isolation, as she continually moves from place to place to avoid suspicion. That is until she meets Ellis, a man who reignites her desire for companionship and love. However, Adaline must decide whether to reveal her secret or continue hiding her true self, even from those she loves most.

    This film touches on themes of immortality, love, and the human desire for connection. The emotional depth of the story lies in Adaline’s struggle with vulnerability—while she has lived many lives, the one thing she truly longs for is something that can’t be measured in years: love. As Adaline wrestles with her past and the future she wants, the film echoes the sentiment of poet T.S. Eliot: “Only those who will risk going too far can possibly find out how far one can go.” It’s a poignant reminder that true love often requires us to take risks, no matter how guarded we might be.

    10-
    Joint Support Supplement with Bromelain, Serrapeptase, Papaya Enzyme, Fungal & Bacterial Protease Enzymes. Joint & Recovery Support. Super Enzymes Serrapeptase Supplement. 60 Delayed Release Capsules

    10. Home Again

    “Home Again” is a lighthearted romantic comedy that stars Reese Witherspoon as Alice, a recently separated single mom navigating life in Los Angeles. After a chance encounter during her birthday celebration, she finds herself inviting three young filmmakers to live in her guest house. What follows is a charming story about the unexpected bonds that form between Alice and her new housemates, as she balances motherhood, her career, and the possibility of new love. The film offers a warm, feel-good vibe, making it perfect for a cozy date night in.

    At its core, “Home Again” is a movie about second chances—whether in love, life, or career. The film touches on themes of personal growth and resilience, as Alice rediscovers her sense of self and learns to embrace the unpredictability of life. The mix of humor, romance, and heartfelt moments makes it an engaging watch. As philosopher Søren Kierkegaard once wrote, “Life can only be understood backwards, but it must be lived forwards,” a sentiment Alice embodies as she finds her way through the complexities of love and family.

    11-
    MASINGO Karaoke Machine for Kids and Adults with 2 Wireless Bluetooth Microphones, PA Portable Speaker with Colorful LED Lights, Supports TF Card/USB, AUX/MIC in, TWS for Home Party, Burletta C10 V2

    11. Five Feet Apart

    “Five Feet Apart” is a deeply emotional and tender film that follows the story of Stella and Will, two teenagers with cystic fibrosis who fall in love despite the life-threatening limitations of their illness. Because of their condition, they must remain at least five feet apart from each other at all times to avoid cross-infection. The movie beautifully captures the tension between their desire to be together and the cruel reality that physical closeness could be deadly. As their connection deepens, they find ways to express love without breaking the crucial five-foot rule, creating an emotionally charged and heartwarming narrative.

    The film poignantly explores the theme of love in the face of adversity, and how emotional intimacy can often transcend physical barriers. It brings to light the bittersweet reality that sometimes love requires immense restraint. As author John Green once said, “The thing about pain is that it demands to be felt,” and “Five Feet Apart” echoes this sentiment as the characters navigate the pain of separation and the beauty of love. The movie leaves a lasting impact, reminding viewers of the fragility of life and the power of human connection, even from a distance.

    12-
    VH Nutrition TRANQUILEX | Stress Relief Supplement* | Ashwagandha, Passion Flower, Kava Kava, Lemon Balm, Licorice Root, and Lavender | Natural Relaxation and Mental Calmness | 60 Capsules

    12. Resort to Love

    In “Resort to Love,” viewers are treated to a tropical romantic comedy that follows Erica, a heartbroken singer played by Christina Milian, who takes a job at a luxurious island resort. What she doesn’t expect, however, is to be hired as the wedding singer for her ex-fiancé’s wedding. The situation gets even more complicated when old feelings start to resurface, and Erica finds herself torn between her past and the potential for new love. With its stunning island backdrop, the film delivers both humor and romance, making it an entertaining escape for a date night.

    The film captures the theme of moving on and finding closure, as Erica learns to let go of her past while opening herself up to new possibilities. It also showcases the idea that healing from heartbreak is a journey, and sometimes, the best way to move forward is by confronting the past. As author Paulo Coelho wisely stated, “If you’re brave enough to say goodbye, life will reward you with a new hello,” which rings true for Erica’s journey throughout the movie. The light-hearted humor and romantic tension make “Resort to Love” a delightful and engaging watch.

    13-
    Potassium Iodide 65MG, 4 Months Supply, 120 Tablets, YODO Naciente, Ki Tablets, Made in USA, Thyroid Support, KI Potassium Iodide Dietary Supplement

    13. Love, Guaranteed

    “Love, Guaranteed” is a fun and witty romantic comedy starring Rachel Leigh Cook as Susan, a hardworking lawyer hired by Nick (Damon Wayans, Jr.) to sue a dating website that guarantees users will find love. The case becomes complicated as the two main characters find themselves growing closer while working together. This Netflix original blends legal drama with romance, making it a lighthearted yet charming watch for anyone who loves feel-good movies. The chemistry between the lead characters and the absurdity of the lawsuit create a humorous yet heartfelt story about the unpredictability of love.

    At its core, “Love, Guaranteed” is a film that highlights how love can come when you least expect it—even in the midst of a legal battle. As the plot unfolds, Susan and Nick learn that relationships can’t be guaranteed by a formula or a website algorithm, but are found in the genuine connections we build with others. It’s a romantic tale that reminds viewers of the importance of serendipity and the value of real human connection. As writer Elizabeth Gilbert once said, “To be fully seen by somebody, then, and be loved anyhow—this is a human offering that can border on miraculous.” This movie captures that spirit beautifully.

    14-
    MASINGO New Karaoke Machine for Adults and Kids with 2 Wireless Microphones, Portable Bluetooth Singing Speaker, Colorful LED Lights, PA System, and TV Cable. Sonoro G5

    14. Midnight at the Magnolia

    “Midnight at the Magnolia” follows the story of two lifelong friends and local radio hosts, Maggie and Jack, who pretend to be a couple in an attempt to get their show syndicated. As they fake their romance for professional gain, they begin to realize that there might be more truth to their feelings than either of them had anticipated. This charming rom-com offers a lighthearted exploration of the “friends-to-lovers” trope, filled with humor, chemistry, and heartwarming moments. The film’s central theme revolves around the blurred line between friendship and romance, which makes it a relatable and enjoyable watch for many.

    As Maggie and Jack navigate the complexities of their staged relationship, they come to understand that sometimes, love has been right in front of you all along. The film explores how fear of ruining a friendship can often prevent people from taking a romantic leap, but ultimately, true connections will thrive. It resonates with the famous words of C.S. Lewis: “Friendship is born at that moment when one person says to another: ‘What! You too? I thought I was the only one.’” In “Midnight at the Magnolia,” that moment is beautifully portrayed as Maggie and Jack find love where they least expected it.

    15-
    Libido Booster for Women – Liboost (Damiana Leaf Extract) is Patented and Clinically Studied Libido Support for Women (Fast Acting – Clinical Results in just 4 Weeks of Daily Use) by Double Wood

    15. Call Me By Your Name

    “Call Me By Your Name” is a tender and evocative coming-of-age film set in the picturesque Italian countryside. It follows 17-year-old Elio (Timothée Chalamet) as he falls in love with his father’s research assistant, Oliver (Armie Hammer). The film beautifully captures the fleeting nature of first love and the deep emotional intensity that comes with it. Set in the 1980s, the story is an exploration of self-discovery, desire, and the complexities of human connection. The cinematography, coupled with an outstanding soundtrack, makes “Call Me By Your Name” a cinematic masterpiece that touches on universal themes of love and loss.

    At the heart of the film is Elio’s journey of emotional growth and the bittersweet experience of falling in love for the first time. It paints a vivid picture of the beauty and pain of young love, making it both a joyful and heartbreaking watch. As Elio learns, love is not only about finding someone who understands you but also about the inevitable heartache that comes with it. The movie echoes the sentiments of the poet Rainer Maria Rilke, who once said, “For one human being to love another: that is perhaps the most difficult of all our tasks.” “Call Me By Your Name” powerfully portrays this complexity through its delicate storytelling.

    16-
    DIFF Sandra Designer Oversized Square Sunglasses for Women UV400 Protection

    16. Happy Anniversary

    “Happy Anniversary” is a reflective romantic dramedy that follows a couple, Sam (Ben Schwartz) and Mollie (Noël Wells), as they celebrate their third anniversary. As they look back on their time together, they find themselves questioning whether they should continue their relationship or part ways. The film expertly balances humor and heartfelt moments, diving deep into the complexities of modern relationships and the challenges that come with long-term commitment. With its relatable storyline, this movie is a perfect choice for couples looking for something both thought-provoking and entertaining on date night.

    The movie explores the idea that anniversaries are not just milestones to celebrate but also opportunities for introspection. Sam and Mollie’s journey highlights the reality that love requires constant effort and reevaluation, and that sometimes, choosing to stay together means accepting the imperfections within the relationship. As author Esther Perel has said, “The quality of our relationships determines the quality of our lives,” and Happy Anniversary beautifully portrays how the couple grapples with this truth, making it a refreshing take on romantic introspection.

    17-
    Arshiner Boys Pink Shirt Casual Short Sleeve Button Down Beach Shirt Solid Summer Blouse Size 14(9-10years)

    17. Always Be My Maybe

    “Always Be My Maybe” is a delightful romantic comedy that brings together childhood friends Sasha (Ali Wong) and Marcus (Randall Park), who reconnect years after they’ve drifted apart. Both have pursued different paths—Sasha becoming a celebrity chef, and Marcus staying close to home—but when they reunite, old feelings begin to resurface, leaving them wondering “what if?” The film is filled with humor, charm, and a sprinkle of nostalgia as it explores the possibility of rekindling a romance that never had a proper chance to blossom. Keanu Reeves’ memorable cameo adds an extra dose of comedy to an already hilarious storyline.

    At the heart of Always Be My Maybe is the theme of second chances and the realization that sometimes, the person you’ve been searching for has been there all along. The film touches on the importance of timing in relationships, as well as the idea that people can grow together, even if they’ve been apart for years. As the famous saying goes, “True love comes quietly, without banners or flashing lights,” and this movie perfectly captures that subtle yet powerful dynamic. Sasha and Marcus’s journey is both heartwarming and inspiring, making this film a great choice for anyone in the mood for a lighthearted romantic comedy.

    18-
    Brickhouse Security GPS Car Tracker – Hidden Tracker for Vehicles – Long Lasting Battery 140-Day LTE GPS Tracking Device for Vehicles with Magnetic Case & Extended Battery – Subscription Required

    18. The Incredible Jessica James

    The Incredible Jessica James is a witty and empowering film that centers around Jessica James, a fiercely independent and struggling playwright played by Jessica Williams. Recently out of a breakup, Jessica finds herself on a blind date with Boone (Chris O’Dowd), a divorcee who is also trying to move on from his past relationship. Their connection grows slowly but surely, and the film explores themes of personal growth, resilience, and the complexities of modern dating. Jessica’s unapologetic attitude and candid sense of humor make this film both refreshing and entertaining.

    What sets The Incredible Jessica James apart is its focus on self-discovery rather than traditional romance. While Jessica navigates her budding relationship with Boone, the film emphasizes her journey toward finding herself and her purpose, showing that love can be a catalyst for personal growth rather than the sole focus. As renowned psychologist Carl Jung once said, “The privilege of a lifetime is to become who you truly are,” and Jessica’s story embodies this sentiment. It’s a film that celebrates individuality, making it a unique addition to any romantic movie lineup.

    19-
    SABRENT USB 3.0 and USB Type-C OTG Card Reader Supports SD, SDHC, SDXC, MMC/MicroSD, T-Flash (CR-BCA2)

    19. Someone Great

    “Someone Great” is a heartfelt film that centers on Jenny (Gina Rodriguez), a music journalist reeling from a breakup with her long-term boyfriend Nate (Lakeith Stanfield). While the movie follows the emotional aftermath of their relationship’s end, it beautifully weaves in Jenny’s friendships with her two best friends, Erin (DeWanda Wise) and Blair (Brittany Snow), as they help her move on and find herself again. Despite its focus on the dissolution of love, the movie still leaves audiences feeling uplifted, reminding us of the power of friendship and new beginnings. The film balances heartache with hope, showing that love in all its forms—romantic and platonic—plays a vital role in our lives.

    At its core, Someone Great emphasizes that healing from a breakup is not just about moving on from a partner but also about rediscovering who you are as an individual. Through moments of laughter, tears, and bonding, the characters remind us that friends are the ones who can help pick up the pieces when romantic love falters. As Maya Angelou once said, “A friend may be waiting behind a stranger’s face,” and this film captures the importance of those connections. Whether you’re mending a broken heart or simply enjoying the ride, this movie’s message of resilience and renewal resonates deeply.

    20-
    Coutgo Womens Kitten Low Heel Pumps Closed Pointed Toe Buckle Ankle Strap Office Work Dress Shoes

    20. Set It Up

    Set It Up is a modern romantic comedy that follows two overworked assistants, Harper (Zoey Deutch) and Charlie (Glen Powell), who conspire to set up their high-strung bosses (played by Lucy Liu and Taye Diggs) in the hopes that it will make their work lives easier. As their plan unfolds, Harper and Charlie begin to realize that they might have feelings for each other as well. This Netflix original is filled with sharp dialogue, clever setups, and a lot of charm, making it a delightful watch for rom-com lovers. The chemistry between the lead characters and the humorous situations they find themselves in makes Set It Up a romantic comedy that stands out from the crowd.

    The film explores how love can grow in unexpected places, even in the most stressful of environments. As Harper and Charlie’s plan spirals, they discover that orchestrating love for others can also help them find love for themselves. Set It Up touches on the unpredictability of relationships and the importance of taking risks. As philosopher Soren Kierkegaard once noted, “To dare is to lose one’s footing momentarily. To not dare is to lose oneself,” and this film encapsulates that leap of faith, making it a feel-good, fun addition to any date night.

    21-
    5 Pack Drawer Dividers ABS 3.5″ High, 11.7”-17.9” Adjustable Drawer Dividers Organizers for Clothes Organizers Expandable Separators Dresser Organizer for Clothes Kitchen Utensils Dresser

    21. The Kissing Booth

    The Kissing Booth is a playful coming-of-age romantic comedy that follows Elle (Joey King), a high school student who finds herself in a tricky situation when she falls for her best friend’s older brother, Noah (Jacob Elordi). Torn between her loyalty to her childhood friend Lee and her blossoming feelings for Noah, Elle must navigate the complexities of young love, friendship, and high school drama. With its mix of humor, heart, and a dash of teenage angst, this film has become a beloved Netflix hit for both teens and adults alike. Its lighthearted and nostalgic approach to romance makes it a fun watch that is full of charm and memorable moments.

    At its core, The Kissing Booth explores the tension between friendship and romance, and how challenging it can be to balance both when strong feelings are involved. Elle’s story reminds viewers of the emotional intensity that comes with first love and the growing pains of adolescence. As famed poet Robert Frost once said, “Love is an irresistible desire to be irresistibly desired,” and this sentiment is perfectly captured in Elle’s journey. With its relatable themes and engaging storyline, The Kissing Booth is a feel-good film that taps into the innocence and excitement of young love.

    22-
    LilyAna Naturals Eye Cream for Dark Circles, Puffiness, Wrinkles, and Bags, Anti-Aging Cream for Sensitive Skin, 1.7 oz (Pack of 1) | Made in USA

    22. The Kissing Booth 2

    For fans of The Kissing Booth, the sequel delivers even more teenage romance, drama, and heartfelt moments. In The Kissing Booth 2, Elle (Joey King) is back, and this time she’s navigating a long-distance relationship with Noah (Jacob Elordi), who is now attending college at Harvard. Meanwhile, a new boy, Marco (Taylor Zakhar Perez), enters the picture, complicating Elle’s feelings and leaving her questioning whether her love with Noah can withstand the miles between them. Filled with emotional highs and lows, this sequel explores the complexities of young love, trust, and the challenges that come with growing up.

    This second installment deepens the love triangle dynamic and delves into themes of loyalty, insecurity, and the evolving nature of relationships. As Elle faces her personal and academic future, the film touches on the importance of self-discovery and balancing romantic desires with individual growth. As novelist Sarah Dessen once said, “The truth about forever is that it’s happening now,” and The Kissing Booth 2 reminds us that the choices we make today shape our future. With its mix of romance, humor, and heartfelt moments, this sequel is a must-watch for anyone invested in Elle’s journey.

    23-
    Magnesium L Threonate Supplement, Magtein High Absorption 120 Purified Veggie Capsules, 2000 mg, Gluten Free, Non-GMO, Vegetarian

    23. The Kissing Booth 3

    The final chapter of the Kissing Booth trilogy, The Kissing Booth 3, follows Elle as she faces her biggest decision yet: choosing between attending college with her best friend Lee (Joel Courtney) or following her boyfriend Noah to Harvard. With graduation looming, Elle must come to terms with what she truly wants for her future, making this movie not only a love story but also a story about self-discovery and independence. As Elle grapples with these life-changing decisions, the film captures the bittersweet nature of growing up and leaving behind the comfort of adolescence for the unknown future.

    This concluding film in the trilogy focuses on the themes of identity, loyalty, and the difficult choices that often come with adulthood. The story emphasizes that love is not just about relationships with others but also about learning to love and prioritize oneself. As philosopher Aristotle once said, “Knowing yourself is the beginning of all wisdom,” and The Kissing Booth 3 encapsulates Elle’s journey of self-awareness. Fans of the series will find this conclusion both satisfying and emotional, offering a fitting end to Elle’s coming-of-age story.

    24-
    Montessori Busy Board 2 3 4 Year Old Toddlers Girl Toys: Preschool Learning Activity Baby Quiet Book Birthday Gifts Easter Basket Stuffers Classroom Game Autism Educational Travel Toy 12 18 Months

    24. The Perfect Date

    The Perfect Date offers a fresh take on the classic teen rom-com, with Noah Centineo starring as Brooks Rattigan, a high school student who develops an app that allows him to pose as a perfect date-for-hire to save money for college. Things take an unexpected turn when Brooks starts to catch feelings for one of his clients, Celia (Laura Marano), challenging his original plan. The movie is a fun, lighthearted romp that explores themes of identity, ambition, and the struggle to fit in. With witty dialogue and an engaging plot, The Perfect Date delivers both romance and laughs, making it an enjoyable addition to any Netflix date night.

    Beyond the charming romance, The Perfect Date touches on the pressures of being young and the need to conform to expectations. Brooks’s journey toward self-acceptance is at the heart of the story, as he realizes that trying to be everything for everyone only leads to losing sight of who he is. As author Brené Brown has said, “Authenticity is the daily practice of letting go of who we think we’re supposed to be and embracing who we are.” This film encourages viewers to embrace their true selves, making it a thoughtful and entertaining romantic comedy.

    25-
    VitaCup Mushroom Coffee Pods – Boost Focus & Immunity with Lions Mane, Chaga, Vitamins, for Memory & Clarity, Recyclable K-Cup Pods, 16 Ct

    25. Falling Inn Love

    Falling Inn Love is a charming romantic comedy set against the stunning backdrop of New Zealand. The film follows Gabriela (Christina Milian), who, after a sudden breakup and career setback, impulsively enters a contest to “win an inn.” When she finds out that she won, she moves halfway across the world to restore the rundown property. There, she meets Jake (Adam Demos), a handsome local contractor, and the two team up to fix the inn. As they work together, sparks fly, and Gabriela begins to realize that this unexpected adventure might just be the fresh start she needs, both in love and life.

    The film captures the magic of stepping out of one’s comfort zone and taking a leap of faith. Falling In Love beautifully balances romance, humor, and the picturesque beauty of New Zealand, making it an ideal feel-good movie for a cozy date night. As relationships expert Esther Perel notes, “Romance is the glamour which turns the dust of everyday life into a golden haze,” and this film exemplifies how taking risks can lead to unexpected love and personal growth. It’s a delightful escape into a world where second chances are not only possible but embraced.

    26-
    Neuro Melatonin 5mg Sleep & Recharge Mints (144 Pieces) – Fast Dissolve Melatonin Sugar Free Mints with Lemon Balm & Chamomile for Better Sleep – Calm Sleep Supplement for Adults – Night Berry Flavor

    26. Candy Jar

    In Candy Jar, the competitive world of high school debate serves as the perfect setting for a classic enemies-to-lovers storyline. Sami Gayle plays Lona, a highly driven student who sees her academic success as the key to her future, but she constantly clashes with her rival Bennet (Jacob Latimore). Both are laser-focused on getting into the best colleges, but as they’re forced to work together on the debate team, they slowly discover that their differences might not be as vast as they thought. This witty, fast-paced film combines intellectual humor with touching moments of vulnerability, making it a great choice for those who enjoy clever dialogue and romantic tension.

    What makes Candy Jar unique is its emphasis on friendship, ambition, and learning to let others in despite one’s defenses. As Lona and Bennet grow closer, they realize that life isn’t just about winning but also about finding meaningful connections along the way. According to psychologist John Gottman, “Successful long-term relationships are created through small words, small gestures, and small acts,” and this film shows how even the most competitive of rivals can come to appreciate and care for each other. Candy Jar is an engaging and thought-provoking romantic comedy that blends romance with the real-life pressures of high school and future aspirations.

    27-
    High Strength Quercetin with Bromelain – Quercetin 500mg Capsules Plus 100mg Bromelain per Serving – Advanced Quercetin Supplement for Lung & Immune Support with Potent Antioxidants (3 Months Supply)

    27. When We First Met

    When We First Met is a time-travel romantic comedy that plays with the idea of fate and destiny. Adam Devine stars as Noah, a man who believes he missed his chance with Avery (Alexandra Daddario), the woman of his dreams. After discovering a magical photo booth that sends him back in time, Noah gets the chance to relive the night they first met, hoping to change his actions and win her over. However, as he repeats the night over and over, he learns that love isn’t always about finding the perfect moment but about being true to yourself.

    This film explores the complexities of unrequited love and the idea that sometimes the person you think is right for you might not be the one you’re meant to be with. Noah’s journey highlights the importance of self-awareness and the realization that love can’t be forced. As author Haruki Murakami once said, “The heart’s memory eliminates the bad and magnifies the good,” and When We First Met delves into how our perceptions of love can change over time. With its humorous take on love, regret, and the unpredictability of romance, this film offers a delightful mix of laughter and reflection.

    28-
    Magnesium Glycinate 200mg Capsules (Glicinato de Magnesio) – Vegan Magnesium 200mg for Restful Sleep & Mood Support, Muscle Comfort, Bone & Nervous System Health. 60 Chelated Magnesium-Glycinate Caps

    28. To All the Boys I’ve Loved Before

    To All the Boys I’ve Loved Before took the world by storm with its charming high school romance and heartfelt storytelling. Based on the bestselling novel by Jenny Han, this Netflix original follows Lara Jean Covey (Lana Condor), a shy teenager whose secret love letters are accidentally mailed out to all the boys she’s ever had a crush on. As she navigates the fallout, including a fake relationship with one of the recipients, Peter Kavinsky (Noah Centineo), Lara Jean discovers that love is much more complicated—and wonderful—than she ever imagined.

    This coming-of-age story is not only a delightful exploration of first love but also a poignant reminder of the vulnerabilities and excitement that come with growing up. Expert in adolescent psychology, Dr. Laurence Steinberg, notes that “teenage relationships help shape self-identity and emotional growth,” a theme deeply embedded in Lara Jean’s journey. With its sweet narrative, relatable characters, and vibrant cinematography, To All the Boys I’ve Loved Before is a perfect pick for a cozy date night or nostalgic rewatch.

    29-
    VH Nutrition ESTREDUX HP Estrogen Blocker for Men* | 1450mg of Maximum Strength Hormone Support W/DIM, Tongkat Ali, Ashwagandha | 60 Capsules

    29. To All the Boys: P.S. I Still Love You

    The romantic saga continues into All the Boys: P.S. I Still Love You, where Lara Jean faces the challenges of maintaining her new relationship with Peter while grappling with the reappearance of another former crush, John Ambrose (Jordan Fisher). The sequel explores themes of loyalty, trust, and emotional honesty, as Lara Jean is torn between two potential loves. It’s a rollercoaster of emotions as she learns that real relationships require more than just romantic gestures—they need communication and vulnerability.

    This second installment dives deeper into Lara Jean’s inner world, showing her growth as she navigates complex feelings of jealousy, confusion, and self-doubt. As relationship expert Dr. Gary Chapman highlights in his book The Five Love Languages, “Love is a choice you make every day,” a sentiment that resonates throughout Lara Jean’s journey in this film. With its heartwarming moments and thoughtful portrayal of young love, P.S. I Still Love You is a charming continuation of the first film’s magic.

    30-
    HARMONIFY Meal Replacement Shake for Women with Vanilla Flavor, 15g Plant Based High Protein Powder, Kosher, Keto Friendly, Non-GMO, 16,9 Oz

    30. To All the Boys: Always and Forever

    The final chapter of Lara Jean’s story, To All the Boys: Always and Forever, sees her and Peter facing the ultimate test of their relationship: college. With the future looming ahead, Lara Jean must decide what she truly wants, not just in love but in life. As she dreams of moving to New York and Peter plans to stay in California, they confront the question every couple faces: can love survive long-distance, or is it time to part ways?

    This final film is an exploration of adulthood, self-discovery, and the difficult choices that come with growing up. As famed author Bell Hooks once said, “Love is an act of will,” and this film emphasizes that staying together requires commitment beyond the initial spark of romance. With a bittersweet yet hopeful tone, Always and Forever beautifully concludes the To All the Boys trilogy, leaving fans with a sense of closure and the excitement of new beginnings. Whether you’re watching for the first time or revisiting the trilogy, this film captures the essence of young love with grace and authenticity.

    31-
    Zizor Women’s Moselle Memory Foam Moccasin Clog Slippers

    Conclusion

    The first trio of films on our list showcases the diverse nature of romantic storytelling, from serendipitous love across the airwaves to the chaotic energy of a wedding day, and the emotional journey of healing after loss. Each film offers a unique perspective on love, reminding us that it can come in many forms, whether through the magic of fate or the process of personal growth. These movies are sure to captivate audiences, making them perfect picks for an intimate date night.

    By exploring themes of fate, timing, and resilience, these films highlight the various stages and challenges of love, offering something for everyone. Whether you’re looking for a nostalgic tearjerker, a comedic twist, or a story of emotional recovery, this selection of movies will leave you feeling both entertained and inspired.

    32-
    Avidlove Women Sexy Skirt A-Line Suspender Skirt Pleated Short Braces Skirt

    The next three films on our list continue to showcase the vast emotional landscape that romantic films can cover. From the difficult choices that define a relationship to the timeless beauty of love letters and the unexpected rekindling of old flames, each movie in this selection brings something special to the table. These films offer a perfect balance of drama, nostalgia, and heartfelt moments, making them ideal for viewers looking for both emotional depth and romantic escapism.

    Whether you’re drawn to the dramatic tensions of a Nicholas Sparks adaptation, the mystery and longing of a love lost and found, or the sweet comfort of rediscovering old love, these films cater to a range of romantic tastes. Each one reminds us that love, in its many forms, is always worth the journey, no matter the obstacles or detours along the way. With their captivating narratives and emotional resonance, these movies will leave you both touched and inspired.

    The third group of films on our list offers a wide variety of romantic journeys, from time-bending narratives to love that defies tradition and even the limits of aging. Each movie explores the complexities of relationships in different ways, whether it’s the urgency of living in the present, the tension between love and duty, or the extraordinary circumstances that challenge our understanding of time and age. These films serve as a reminder that love is rarely simple, but always worth the challenges it brings.

    What these films share in common is their focus on love as a transformative force, capable of altering lives in profound ways. Whether it’s the fleeting moments of connection in “Long Story Short,” the tension between freedom and loyalty in “Roped,” or the timeless romance of “The Age of Adaline,” each story reminds us that love requires courage, sacrifice, and the willingness to embrace the unknown. These themes resonate deeply, making these films ideal picks for a date night that leaves you both entertained and contemplative.

    The last set of films in our list brings a diverse mix of romance, from lighthearted comedies to emotionally charged dramas. Whether it’s the charming and unpredictable dynamic in “Home Again,” the bittersweet reality of love and illness in “Five Feet Apart,” or the tropical escapism of “Resort to Love,” these films offer viewers a variety of romantic narratives that cater to different moods and tastes. Each movie explores unique aspects of love, reminding us that romance can be found in both the simplest and most complex of situations.

    What ties these films together is their exploration of the transformative power of love, whether it’s about rediscovering yourself, navigating difficult circumstances, or learning to move on from past heartbreaks. These stories serve as a beautiful reminder that love comes in many forms and is often found in the most unexpected places. From the cozy comfort of home to the challenges of illness, or the healing power of a tropical getaway, these movies will sweep you away with their heartfelt and engaging stories, perfect for a date night in.

    This trio of films showcases the many different ways love can surprise, challenge, and transform us. From the unexpected romance born out of a lawsuit in “Love, Guaranteed,” to the friends-turned-lovers dynamic in “Midnight at the Magnolia,” and the poignant coming-of-age romance in “Call Me By Your Name,” these movies offer a wide range of emotional depth and charm. Each film takes a unique approach to love, whether it’s through laughter, friendship, or youthful discovery, but they all remind us that love often appears when we least expect it.

    These films highlight the unpredictable nature of relationships, showing that love can be found in the most unlikely of places, whether it’s in the courtroom, the studio, or the sun-drenched countryside of Italy. Each story emphasizes that love is not something we can plan for or control, but something that grows naturally, even in the most complicated circumstances. Together, these movies remind us of the beauty and complexity of romance, making them perfect choices for a memorable date night.

    This trio of films offers a refreshing take on modern romance, each highlighting different aspects of relationships—from self-reflection in Happy Anniversary, to second chances in Always Be My Maybe, and the journey of self-discovery in The Incredible Jessica James. Each movie brings something unique to the table, exploring the complexities of love in ways that feel both relatable and inspiring. Whether it’s a couple at a crossroads, old friends reconnecting, or an individual navigating love and personal growth, these films are perfect for those seeking romance with a deeper emotional undertone.

    Together, these movies remind us that love isn’t always straightforward—it often comes with challenges, questions, and opportunities for personal development. They explore the idea that relationships, whether new or old, require honesty, patience, and sometimes, a bit of humor to navigate successfully. These films make for thoughtful, engaging watches that will not only entertain but also leave viewers reflecting on their own experiences with love, making them great options for a meaningful date night.

    The seventh group of films delves into the many facets of love—whether it’s the end of a long-term relationship, the discovery of romance in unexpected places, or the thrill of first love. Someone Great reminds viewers of the importance of friendship in healing after heartache, while Set It Up and The Kissing Booth offer more lighthearted takes on how love can emerge in even the most unlikely circumstances. Together, these movies capture the unpredictable and multifaceted nature of romance, making them ideal for a date night that spans a range of emotions.

    These films highlight the idea that love isn’t confined to romantic relationships; it’s found in friendships, personal growth, and the decisions we make to pursue what truly matters to us. Each movie brings its unique perspective on how love shapes our lives, whether through laughter, tears, or self-discovery. From the bittersweet moments in Someone Great to the playful spirit of The Kissing Booth, these stories offer something for everyone, showcasing the diversity and beauty of love in all its forms.

    This next set of films continues to explore the evolving nature of young love and the challenges that come with finding oneself while navigating romantic relationships. The Kissing Booth 2 and The Kissing Booth 3 offer fans of the trilogy a chance to see Elle’s journey come full circle as she wrestles with the trials of growing up, making difficult choices, and discovering what truly matters in life. Meanwhile, The Perfect Date brings a fresh twist to the teen romance genre, mixing humor with heartfelt moments of self-realization.

    All three films share a common thread of identity and self-discovery, reminding viewers that love often comes hand-in-hand with personal growth. Whether it’s deciding on the next step in life, like Elle’s college decision in The Kissing Booth 3, or learning to be authentic in The Perfect Date, these movies highlight the importance of balancing romance with individual development. Together, they offer a mix of lighthearted fun and thoughtful introspection, making them the perfect choices for an engaging and meaningful date night on Netflix.

    This set of movies brings a fresh array of romantic themes, from second chances in Falling Inn Love, to intellectual rivalries turned romance in Candy Jar, to time-travel escapades in When We First Met. Each of these films explores the journey to finding love in unique and heartwarming ways, whether through taking a leap of faith, discovering an unexpected connection with an adversary, or realizing that true love can’t be engineered through perfect circumstances.

    These films highlight different facets of romance, reminding us that love is unpredictable and often comes from the most unexpected places. Whether it’s through rebuilding a life in a foreign country, overcoming competitive rivalry, or reflecting on what could have been, these movies encourage viewers to embrace love’s unpredictability. Together, they offer a perfect mix of charm, humor, and introspective moments, making them an excellent choice for anyone seeking romance with a touch of life’s serendipity on Netflix.

    The To All the Boys trilogy is a quintessential Netflix romance series, encapsulating the highs and lows of young love. From Lara Jean’s secret letters and Peter’s charming smiles to the heartfelt moments of growing up, these films offer an irresistible combination of sweetness, humor, and emotional depth. With each movie, viewers are drawn deeper into the complexities of teenage romance, self-discovery, and the transition into adulthood, all while maintaining a lighthearted and captivating tone.

    Together, these films remind us of the beauty and challenges of love, whether it’s navigating the thrills of first love, facing the fear of losing someone special, or making difficult decisions for the future. As these romantic stories unfold, they encourage viewers to embrace the uncertainties of life and love, making them a perfect pick for a date night. Fans of romantic comedies and coming-of-age stories will find endless reasons to fall in love with To All the Boys over and over again.

    This collection of romantic films on Netflix offers a diverse array of love stories that cater to every kind of viewer, from lighthearted comedies to poignant dramas. Each movie showcases the myriad experiences of love, illustrating how it evolves and is often intertwined with self-discovery, friendship, and personal growth. Whether it’s the whimsical charm of Falling Inn Love, the competitive yet sweet dynamic in Candy Jar, or the heartfelt journey of Lara Jean in the To All the Boys trilogy, these films resonate with the universal emotions that come with falling in love.

    What ties these films together is their ability to capture the essence of romance in its many forms, encouraging viewers to embrace their own experiences, joys, and challenges. As viewers embark on these cinematic journeys, they are reminded that love is not just about the big moments but also the small, everyday choices that shape our relationships. In the words of renowned author Elizabeth Gilbert, “You need to participate relentlessly in the manifestation of your blessings.” So grab some popcorn, cozy up with your loved one, and enjoy these heartwarming films that promise to ignite feelings of nostalgia, joy, and perhaps even a little romance of your own.

    Bibliography on Love Story Movies

    • Han, Jenny. To All the Boys I’ve Loved Before. Simon & Schuster, 2014.
      A young adult novel that explores the complexities of teenage love and the consequences of unaddressed feelings, serving as the inspiration for the popular Netflix trilogy.
    • Moyes, Jojo. The Last Letter from Your Lover. Pamela Dorman Books, 2008.
      A romantic drama that intertwines two love stories across different periods, highlighting the enduring nature of love and memory.
    • Sparks, Nicholas. The Choice. Grand Central Publishing, 2007.
      A poignant narrative about the challenges of love and relationships, based on the complexities of making life-altering decisions.
    • Gottman, John. The Seven Principles for Making Marriage Work. Crown Publishers, 1999.
      This book offers insights into maintaining long-term relationships, emphasizing the importance of emotional connection and communication.
    • Perel, Esther. Mating in Captivity: Unlocking Erotic Intelligence. HarperCollins, 2006.
      A thought-provoking exploration of intimacy and passion in long-term relationships, providing valuable insights relevant to romantic films.
    • Gilbert, Elizabeth. Eat, Pray, Love: One Woman’s Search for Everything Across Italy, India, and Indonesia. Viking, 2006.
      A memoir that discusses the pursuit of love, self-discovery, and personal fulfillment, which resonates with many themes in romantic cinema.
    • Schwartz, Ben, and Noël Wells. Happy Anniversary. Netflix, 2018.
      A romantic comedy that delves into the reflective moments of a couple as they commemorate their anniversary, exploring themes of love and commitment.
    • Steinberg, Laurence. You and Your Adolescent: A Parent’s Guide for Ages 10 to 20. HarperCollins, 1999.
      This book provides insights into adolescent relationships and development, relevant for understanding the romantic dynamics portrayed in youth-centric films.
    • hooks, bell. All About Love: New Visions. HarperSanFrancisco, 2000.
      A foundational text on the meaning of love and its transformative power, offering profound insights that resonate with themes found in love stories.
    • Alderson, Brian. The History of Love Stories in Cinema. Academic Press, 2020.
      An exploration of the evolution of romantic films and their cultural significance, analyzing various genres and tropes in love stories.

    These texts provide a rich context for understanding the themes, dynamics, and cultural significance of love stories in cinema, enhancing the appreciation of romantic films across various genres.

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog

  • Trump’s Agenda: Reshaping America and the World by Orya Maqbool Jan

    Trump’s Agenda: Reshaping America and the World by Orya Maqbool Jan

    The text analyzes Donald Trump’s political agenda and its potential global impact, particularly concerning Pakistan and the Middle East. It explores Trump’s conflict with the “Deep State,” a powerful, shadowy group allegedly controlling global politics, and his plans to dismantle their influence. The text further examines Trump’s domestic policies, focusing on his stance on social issues and immigration. Finally, it discusses the potential ramifications of Trump’s policies on international relations, especially his relationship with various world powers and the consequences for countries like Pakistan. The author uses Trump’s presidency as a lens to examine larger geopolitical forces at play.

    Review of Trump Analysis: A Study Guide

    Short Answer Quiz

    1. According to the analysis, what is the “deep state” and when did it allegedly begin to exert significant control? The “deep state” is described as a group that controls the world system, beginning around 1920 but solidifying power after the 1944 Bretton Woods Agreement, using the dollar and institutions like the IMF, World Bank, and United Nations.
    2. What is Project 2025, and what groups are associated with its creation? Project 2025 is an agenda created in 1981 by around 400 scholars and policymakers associated with the Heritage Foundation. It includes Republicans, Orthodox Christians, evangelicals, and others who believe in Christian ethics.
    3. The analysis says that Trump is coming to put an end to what in American society? Trump is said to want to put an end to what the analysis calls “a spectacle” of civil liberties, morality, and religion created in the US, which are associated with the “deep state.”
    4. How did Trump reportedly view the military-industrial complex, particularly after the wars in Afghanistan and Iraq? Trump viewed the military-industrial complex with suspicion, believing that it profited excessively from the wars. He questioned the amount spent, noting that a significant portion of the trillions of dollars went to a few large companies, not the soldiers.
    5. According to the analysis, what was Trump’s initial plan for ending the war in Afghanistan, and why did it fail? Trump planned a secret meeting with the Taliban at Camp David, but the US establishment canceled it overnight. It is portrayed as a major defeat for Trump and a deliberate effort to undermine his agenda.
    6. What were some of the issues that contributed to Trump’s popularity with his base, as mentioned by the text? Trump’s base is said to identify with the perception of black people, illegal immigrants, and “successful” career women as burdens. The analysis says that they perceive “every Muslim as a terrorist” and “every Christian as a Bible pusher.”
    7. How does the text explain that the U.S. military strategy in Afghanistan is historically typical of U.S. and British imperialist policy? The U.S. is depicted as following a traditional colonial approach of creating and funding a local proxy army to suppress dissent, as was done in other regions such as the Philippines, Vietnam, and Afghanistan.
    8. According to the text, what is the significance of the Jack Smith appointment to investigate Trump? Jack Smith is described as a special advisor in the Justice Department who filed numerous cases against Trump. The analyst emphasizes that some see his appointment as evidence that Trump is being politically targeted by the establishment, similar to how political leaders in Pakistan are targeted with fabricated cases.
    9. What does the text suggest about Trump’s view of “wise nations” and how it connects with his foreign policy approach? Trump is described as believing that “wise nations” should not get involved in never-ending wars or conflicts. This relates to his desire to end U.S. involvement in various foreign engagements.
    10. How does the analysis portray Trump’s stance on cultural issues such as LGBT rights and abortion? Trump is presented as an opponent of LGBT rights and abortion. He views them as part of a moral decline, and he is depicted as wanting to end what he sees as the normalization of these issues in American society and education.

    Answer Key

    1. The “deep state” is described as a group that controls the world system, beginning around 1920 but solidifying power after the 1944 Bretton Woods Agreement, using the dollar and institutions like the IMF, World Bank, and United Nations.
    2. Project 2025 is an agenda created in 1981 by around 400 scholars and policymakers associated with the Heritage Foundation. It includes Republicans, Orthodox Christians, evangelicals, and others who believe in Christian ethics.
    3. Trump is said to want to put an end to what the analysis calls “a spectacle” of civil liberties, morality, and religion created in the US, which are associated with the “deep state.”
    4. Trump viewed the military-industrial complex with suspicion, believing that it profited excessively from the wars. He questioned the amount spent, noting that a significant portion of the trillions of dollars went to a few large companies, not the soldiers.
    5. Trump planned a secret meeting with the Taliban at Camp David, but the US establishment canceled it overnight. It is portrayed as a major defeat for Trump and a deliberate effort to undermine his agenda.
    6. Trump’s base is said to identify with the perception of black people, illegal immigrants, and “successful” career women as burdens. The analysis says that they perceive “every Muslim as a terrorist” and “every Christian as a Bible pusher.”
    7. The U.S. is depicted as following a traditional colonial approach of creating and funding a local proxy army to suppress dissent, as was done in other regions such as the Philippines, Vietnam, and Afghanistan.
    8. Jack Smith is described as a special advisor in the Justice Department who filed numerous cases against Trump. The analyst emphasizes that some see his appointment as evidence that Trump is being politically targeted by the establishment, similar to how political leaders in Pakistan are targeted with fabricated cases.
    9. Trump is described as believing that “wise nations” should not get involved in never-ending wars or conflicts. This relates to his desire to end U.S. involvement in various foreign engagements.
    10. Trump is presented as an opponent of LGBT rights and abortion. He views them as part of a moral decline, and he is depicted as wanting to end what he sees as the normalization of these issues in American society and education.

    Essay Questions

    1. Analyze the author’s portrayal of the “deep state” and its influence on global events, citing specific examples provided in the text. How does this portrayal shape the interpretation of Trump’s political actions?
    2. Discuss the significance of Project 2025 in the context of the text’s analysis. What are its goals, and how do they reflect the concerns and aspirations of Trump’s supporters?
    3. Evaluate the text’s argument that Trump’s rise to power represents a challenge to the established global order, focusing on his views on war, American military and economic power, and international alliances.
    4. Analyze the author’s portrayal of Trump’s domestic agenda, including his stances on social issues, cultural values, and the role of the government, examining the different groups that support and oppose him.
    5. How does the text characterize the relationship between the establishment and Trump, and what does it suggest about the likely future political and legal battles he will face?

    Glossary of Key Terms

    • Deep State: A hidden network of powerful individuals, often within government, military, and financial institutions, that allegedly manipulates policy for their own interests.
    • Bretton Woods Agreement: A 1944 agreement that established the post-World War II international monetary system, based on the U.S. dollar.
    • IMF (International Monetary Fund): An international organization that provides financial assistance and economic advice to member countries.
    • World Bank: An international financial institution that provides loans and grants to governments for development projects.
    • United Nations: An intergovernmental organization that aims to promote international cooperation and maintain world peace.
    • Project 2025: An agenda formulated by conservative scholars and policymakers in 1981 with the aim to implement policies that align with conservative and religious values in the United States.
    • Military-Industrial Complex: The close relationship between the military establishment and the industries that supply it with weapons and equipment.
    • Post-Traumatic Stress Syndrome (PTSD): A mental health condition triggered by experiencing or witnessing a terrifying event.
    • Evangelicals: A broad movement within Protestant Christianity that emphasizes the importance of a personal relationship with Jesus Christ and spreading the Gospel.
    • LGBT: An acronym referring to lesbian, gay, bisexual, and transgender people.
    • Caligula: A Roman Emperor known for his cruelty, extravagance, and erratic behavior.
    • Regime Change: The replacement of a government with a new government.
    • Hash Money Case: A reference to a case where Trump allegedly made payments to cover up an affair, the money which was not recorded as an expense and thus is seen as illegal.
    • Tabloids: Newspapers or news magazines that are sensationalist and focus on scandals and gossip.
    • Isolation Politics: A foreign policy approach that seeks to limit a country’s involvement in international affairs.
    • Deweaponizing: Removing or reducing the number of weapons, often used in reference to removing oversight and power from law enforcement bodies.
    • DFPI: Possibly a reference to the Department of Financial Protection and Innovation.
    • Bureaucrats: Officials in government and other large organizations, characterized by their adherence to rules and routines.
    • Ashraf Ghani: The former President of Afghanistan.
    • Blackwater: A private military company that was hired by the U.S. in Iraq and Afghanistan.

    Trump, the Deep State, and a New World Order

    Okay, here’s a detailed briefing document summarizing the main themes and ideas from the provided text.

    Briefing Document: Analysis of “Pasted Text” on Donald Trump & Global Politics

    Introduction:

    This document analyzes a lengthy audio transcript discussing Donald Trump’s political career, motivations, and potential impact on both the United States and the global order. The speaker presents a narrative heavily critical of the “deep state” and a global establishment, portraying Trump as an anti-establishment figure aiming to dismantle this existing power structure. The analysis encompasses various topics including US foreign policy, domestic issues, and the role of influential interest groups. The speaker’s perspective is clearly sympathetic to Trump’s vision and highly critical of the establishment he is trying to upend.

    Key Themes & Ideas:

    1. Trump as an Anti-Establishment Figure:
    • The core narrative is that Trump is a disruptor who rose to power by challenging the “deep state” – an alleged network of powerful forces that have controlled the world since the 1920s, particularly after the Bretton Woods agreement in 1944. This deep state is accused of manipulating the world through the US dollar, the IMF, World Bank, and the UN.
    • Quote: “Trump has come to the fore by defeating the American establishment, the Deep State… this deep state which has been controlling not America but the world system for a long time…”
    • Trump is presented as someone who seeks to reverse the course set by this establishment, particularly in regards to the perceived new world order.
    • This includes challenging the military-industrial complex and the “endless wars” that allegedly serve its financial interests.
    1. Project 2025 & the Conservative Agenda:
    • The speaker highlights “Project 2025,” an agenda created by conservative scholars and policy makers in 1981, aiming to restore “lost” societal values. This agenda is closely associated with Trump’s platform.
    • Key tenets include:Securing borders and deporting illegal immigrants.
    • “Deweaponizing” the government by increasing oversight of agencies like the FBI.
    • Reversing policies on education, transgender rights, and abortion, framing them as threats to morality.
    • The speaker notes they want to move control and funding of education from the DC bureaucrats directly to parents and states and local governments, in reference to Rockefeller and the book Dumbing Us Down and Other Weapons of Mass Instruction.
    • This agenda is rooted in Christian ethics and the views of evangelists.
    • Quote: “Secure the border, finish building the wall and deport illegal people. We want to secure America from aliens… The effects can be estimated through deweaponizing… energy prices.”
    1. Critique of US Foreign Policy & Military Interventionism:
    • The transcript is highly critical of U.S. military interventions, particularly those following 9/11, arguing that they were driven by the interests of the military-industrial complex and resulted in immense suffering.
    • The speaker uses wars like Vietnam, Afghanistan, Iraq, and those in Latin America and Africa as examples of this exploitative behavior.
    • The speaker points out the immense cost of the war in Afghanistan ($3 trillion), particularly the money going to the big 5 defense corporations (almost $1.5 trillion) and Black Water (hiring spies).
    • Trump is credited with realizing the high cost of these wars both in terms of finance and human suffering, such as the high suicide rate among veterans.
    • Quote: “Then he realized that 3000 billion 3 trillion dollars is America’s…funds of the economy which were made up of the tax payers have been spent.”
    • The speaker discusses Trump’s attempt to negotiate with the Taliban as an attempt to withdraw from the “endless” war and how his efforts were frustrated by the establishment.
    • The speaker believes that Trump sees these war theaters as something to “finish off” and that the US military-industrial complex opened after 9/11 will be dismantled by Trump.
    1. Trump’s Appeal & His Base:
    • The speaker argues that Trump’s support is based on the perceived “prototype” in American minds – stereotypes like:
    • Every Black person is a burden on welfare.
    • Every Spanish/illegal immigrant is a burden.
    • Successful women are not good homemakers.
    • Every Muslim is a terrorist, and every Christian is a “Bible pusher.”
    • He claims these are the issues that made Trump who he is today.
    • The speaker believes Trump did not have the power to enact his agenda the first time he was president.
    1. The Legal Battles Against Trump and the “Deep State’s” Reaction:
    • The speaker highlights the intense legal and media opposition that Trump has faced.
    • The speaker goes on to discuss the numerous lawsuits against Trump and the appointment of Jack Smith. The speaker quotes Elon Musk as saying “if we do not punish him, it means that we did not win the election” in reference to Jack Smith.
    • The deep state has used the courts to destroy him, but has failed the courts. Now the “boot is on the other foot” and Trump will use this against the establishment.
    • Trump’s actions are framed as necessary to combat the deeply entrenched forces working against him.
    1. Trump’s Impact on Global Dynamics:
    • The transcript suggests that Trump’s policies will significantly impact the global order, potentially creating a new system that challenges American dominance.
    • The speaker suggests that Trump’s policies will be a “big nightmare for Pakistan” and that Trump will likely take away their position as a strategic ally of the US.
    • The speaker believes that Trump’s approach will challenge existing alliances and reshape the landscape of US relations with countries like China.
    • The speaker discusses the ongoing tension between the US and China (two big US fleets in the China sea with 56 ships) and how Trump is seeking to alter this relationship.
    1. Trump’s “New World Order”:
    • The speaker describes Trump’s actions as seeking to dismantle the current power structure and institute a new world order.
    • This involves ending the influence of those who are “afraid of Trump” who want to end the morals of the people and who believe the fundamentals under Human Rights are “my body, my choice”.
    • Trump seeks to control education and sees the LGBT, abortion rights, and transgender issues as going against his values.
    • The speaker also addresses Trump’s belief that Israel will build the temple that will bring Jesus back to punish the Jews.
    1. Historical Analogies:
    • The speaker draws a comparison between Trump and the Roman Emperor Caligula, suggesting that, like Caligula, Trump is perceived as a “mad” figure by his opponents, while in reality he is a disrupter challenging established norms.
    • Quote: “It is a shame he said that history has remembered kalegala as the mad emperor…but it’s unlike the caligula was mad at all despina as a mad emperor…”

    Conclusion:

    The transcript provides a detailed and highly opinionated perspective on Donald Trump and his political agenda. It portrays him as a revolutionary figure fighting against a powerful, corrupt “deep state” that has controlled the world for decades. The speaker sees Trump’s actions as a necessary corrective to restore morality, break the cycle of endless wars, and create a more equitable world order, though it will be one led by his unique brand of American nationalism. The speaker’s narrative heavily emphasizes the alleged failures of US foreign policy, the corrupting influence of the military-industrial complex, and the need for a radical change in the existing global power structure. The speaker also stresses Trump’s domestic agenda is to reverse the trend of gender and sexual identity issues in the US through controlling education. The speaker is anticipating that Trump will continue to be under attack from the “deep state”, but is optimistic that Trump can succeed in his mission to “crucify” those who have set the whole world on fire.

    Note: It is crucial to remember that this document presents one specific interpretation of events and it is important to research these topics further with more sources. The speaker has an agenda, and this should be kept in mind when considering the merits of these interpretations.

    Trump, the Deep State, and Project 2025

    FAQ on the Themes of the Provided Text

    1. What is the “deep state” and how does it relate to Donald Trump according to the text?
    2. The “deep state,” as described in the text, is a long-standing, powerful establishment that has controlled not just the United States but the world system. This system is said to have its roots in the 1920s but solidified after the Bretton Woods Agreement in 1944, using the dollar as a means of global control. It includes entities like the IMF, the World Bank, and the United Nations. According to the text, Trump has come to the fore by defeating the American establishment which is this “deep state,” which he views as corrupt and responsible for countless wars and global instability.
    3. What is “Project 2025” and what are its main objectives?
    4. “Project 2025” is an agenda formulated by around 400 scholars and policy makers under the Heritage Foundation, starting in 1981. It’s a conservative plan that aims to restore what they perceive as the lost values of American society. Its main objectives include securing borders by building the wall and deporting illegal immigrants; reducing government spending; increasing accountability of federal bureaucracies to the president and Congress; ending “moral decay” related to issues such as LGBTQ+ rights and abortion rights; deweaponizing energy prices by using strategic reserves; and reforming education by moving control away from DC bureaucrats to parents, states and local governments. Essentially, it seeks to dismantle the progressive policies and return to a more traditional and conservative America.
    5. How does the text characterize Trump’s views on domestic American issues?
    6. The text portrays Trump as someone who exploits the “prototype images” of the American people. He is depicted as someone who plays on the fears and prejudices of segments of the population. He is shown as someone who is against the concepts of LGBTQ+ rights, abortion rights, and illegal immigration, aligning with the views of more traditional and conservative Americans. The text indicates that Trump taps into feelings that the system is rigged, that the elite does not care about the common person and that America has lost its way.
    7. What does the text say about Trump’s perspective on foreign policy and military intervention?
    8. Trump is presented as an anti-war figure who is critical of the U.S. military-industrial complex. The text emphasizes that he seeks to end what it characterizes as “endless wars” and that he wants to dismantle the post 9/11 military industrial complex that he sees as financially wasteful and detrimental to America. He is shown as frustrated with the high costs of U.S. military engagements and the human cost in terms of veteran trauma and suicide. He aimed to reduce US military engagement and tried to negotiate a deal with the Taliban to withdraw from Afghanistan, a deal that was ultimately not carried out. He also seems to challenge existing power dynamics, particularly in the Middle East.
    9. According to the text, how has Trump’s relationship with the establishment in America impacted him?
    10. The text emphasizes that the American establishment, or the “deep state” is very much against Trump and they used everything against him to try and defeat him. They are described as using the courts against Trump, trying to frame him for the Capitol Hill attack, and using cases involving past interactions with a porn star to undermine him. Despite all that he has still won. The text suggests that if Trump returns to power, he would seek to purge the legal system and turn the law against the establishment who worked against him.
    11. How does the text describe the situation in Afghanistan during and after Trump’s presidency?
    12. The text portrays Trump as having attempted to negotiate with the Taliban to facilitate the withdrawal of US forces. However, the establishment was against this, thus causing him to cancel the deal. The establishment then set out to make the situation worse in Afghanistan as Trump was exiting. This was done by training a US-backed army in Afghanistan with the plan that they would take over after the US left, but that army collapsed quickly. The Afghan government that the US had backed collapsed just after the departure of the US military, leading to the Taliban retaking control of the country. This collapse is attributed to the US attempting to force a unified, structured system onto a tribal society that could not effectively adopt it.
    13. What role does Pakistan play in the geopolitical picture according to the text and what is the concern about Trump?
    14. Pakistan has historically served as a key US ally in the region, providing support for the US military in the Cold War and the War on Terror. Pakistan has been heavily dependent on US aid. The concern is that Trump will not need Pakistan as a strategic partner in the war on terror anymore which could lead to a cut off of US aid and a decline in the US-Pakistan relationship. This would leave Pakistan in a vulnerable and dependent position. Additionally, Pakistan’s establishment has historically tried to bring stability to the border but has been undermined by other US interests and that it could face more challenges with the return of Trump. The text also briefly mentions how Pakistan is one of the many places that has had regime change experiments conducted on them by the US.
    15. How does the text depict the reaction of the media, political elites, and other establishment entities to Trump’s rise in power?
    16. The text depicts a sense of panic among the media, political elites, and top figures in the military and civil service due to Trump’s return. It suggests that the “ruling class” used every available tool against Trump, from legal actions to media smear campaigns, in an attempt to prevent him from regaining power. This is framed as a coordinated effort by the “deep state” to retain its influence and power, and Trump is depicted as a threat to that power structure.

    Trump, the Deep State, and Project 2025

    Okay, here is a timeline of the main events and a cast of characters based on the provided text:

    Timeline of Main Events

    • 1920s: The beginning of the “Deep State,” an alleged global power structure, is said to have taken shape.
    • 1944: The Bretton Woods Agreement is signed, establishing the U.S. dollar as the world’s reserve currency and setting the stage for U.S.-led global financial control.
    • Post-1945: A period marked by the Cold War, instigated by a group of American capitalists who profited from arms manufacturing. This period also includes the Vietnam War, conflicts in Latin America, Africa, and the Middle East, along with the wars in Afghanistan and Iraq after 9/11.
    • 1954: The start of a period where Pakistan (or “Gujaratis” in the text) began supporting America, fighting wars on America’s behalf and receiving funding and weapons in return.
    • 1981: The Heritage Foundation initiates “Project 2025,” a long-term plan with input from Republican and religious figures to reshape America based on conservative and Christian values. Ronald Langer is involved in this project.
    • 2003: The U.S. military advertises for recruitment in Iraq. Private military contractors such as Blackwater become prominent.
    • 2013: The Taliban office in Qatar opens, signaling a potential opening for negotiations.
    • 2016: Donald Trump wins the U.S. Presidential election, defying expectations.
    • 2017: The author of the text visits New York both before and after Trump’s election, and discusses Trump’s appeal with a former escort who states she knows the American people well and believes Trump’s slogans resonate with them. The text mentions that in 2017, the author saw a veteran begging in front of Princeton Station.
    • September 7, 2019: Trump plans a secret meeting with the Taliban at Camp David, but the meeting is canceled overnight.
    • August 15, 2021: The Taliban retakes Kabul, Afghanistan. A large, US-trained Afghani army quickly surrenders.
    • Post-Trump Presidency: There is an attempt by the deep state to incite revolution in Syria, which is foiled by the US and Russia reconciliation. The US also attempts to get Pakistan to engage in a war with Iran.
    • 2023: Project 2025 is relaunched, also called the Conservative Promise Mandate for the Leadership. The text implies Trump is looking to take actions he was blocked from in his first term.
    • Present: Donald Trump seeks to “purge” the legal system and go after his enemies and is using legal means against the establishment.

    Cast of Characters

    • Donald Trump: Former U.S. President. The central figure of the narrative, portrayed as an anti-establishment force seeking to undo the work of the “Deep State,” end wars, and restore conservative values to America. He is described as someone who doesn’t need money, is not a typical politician, and is a symbol for certain groups.
    • Ronald Langer: An individual associated with the Heritage Foundation and Project 2025 in 1981.
    • Lizbeth Beatty Jones: A New Yorker writer, described as a former escort with a deep understanding of American people. She discusses Trump’s appeal with the author.
    • General Bajwa: General of the Pakistan Army. He is mentioned as being involved in peace talks in Afghanistan, although the text insinuates that these talks were deliberately sabotaged to allow unrest to continue.
    • General Fais: Another general involved in peace talks for Afghanistan and Pakistan
    • Ashraf Ghani: Former President of Afghanistan, who recognizes the strength of the Taliban.
    • Joe Biden: Current U.S. President, in office when Kabul fell to the Taliban in 2021, who expressed shock and disappointment at the speed of the Afghan army’s collapse.
    • Consus Crocker: Ambassador, who gave a briefing stating that the Afghan issue would be addressed at a later date when appropriate.
    • Jack Smith: A special advisor in the Justice Department, appointed to investigate Trump, who brought several cases against Trump.
    • Elon Musk: The owner of X, formerly known as Twitter, who has spoken out against Jack Smith and the cases against Trump.
    • Unnamed Porn Star: A woman who had a prior relationship with Trump who was paid $135,000 to stay quiet.
    • Richard Grall: An individual whose incident is referenced in regards to damage control being done by Imran Khan and the Pakistani government.
    • Unnamed Head of the Pentagon: A political appointee, described by the narrator as a “hack” and as a violation of the time-honored customs that the President should consult with the barons of the weapon industry.
    • Unnamed Fox News presenter: The new head of the Awaaz as appointed by Trump, also seen as an unorthodox choice who has no prior relevant experience and is not a part of the typical establishment.

    Key Themes and Context

    • “Deep State”: The text portrays a shadowy, global power structure, often referred to as the “Deep State,” that is seen as controlling the world for its own benefit. Trump is positioned as an opponent of this force.
    • American Exceptionalism and Decline: There’s an undercurrent of concern about America’s decline, its moral decay, and the damage it has inflicted in its foreign interventions.
    • Conservative and Religious Agendas: Project 2025 is seen as a vehicle to bring back traditional values to America, with a strong focus on conservative and Christian viewpoints and also a condemnation of LGBT rights and abortion rights.
    • War and Military-Industrial Complex: The text is critical of the U.S. military-industrial complex, which is seen as profiting from endless wars. The narrative also highlights the negative consequences of military intervention on the veterans involved.
    • Trump’s Unorthodox Approach: Trump is seen as a figure who defies conventions, challenges the establishment, and does not follow traditional political strategies.

    Let me know if you need any clarification or further analysis.

    Trump’s Agenda: Populism, Power, and the “Deep State

    Based on the provided sources, here’s a breakdown of Donald Trump’s agenda:

    Core Objectives and Ideologies:

    • Challenging the Establishment: Trump aims to dismantle what he perceives as the “deep state” [1], which he believes has been controlling the world system since around 1920 and especially since the Bretton Woods Agreement of 1944 [2]. He sees himself as having come to the fore by defeating the American establishment [1].
    • Reversing Globalist Policies: Trump seeks to reverse steps towards a new world order that he believes the U.S. has been pushing for [1]. He is critical of the global financial system controlled by the US through the dollar, the IMF, and the World Bank [2].
    • Restoring Traditional Values: Trump’s agenda is rooted in appealing to a specific segment of the American population that he sees as desiring a return to a lost society [3]. He is against abortion rights [4], the LGBT movement [4, 5] and what he perceives as a decline in traditional morality and religion [1].
    • “America First” Policy: This includes securing borders by finishing the wall, deporting illegal immigrants, and limiting immigration [3]. He believes that immigrants are a burden on the welfare system [6].
    • Dismantling the Military-Industrial Complex: Trump wants to dismantle the US military-industrial complex that grew after 9/11 [5]. He is critical of the wars in Afghanistan and Iraq, which he believes were driven by the interests of a few capitalists [2, 5].

    Specific Policy Proposals and Actions:

    • Economic Policy: Trump intends to use strategic oil reserves to control energy prices and buy oil from Saudi Arabia and Venezuela [3]. He also wants to reduce government spending to reduce inflation [3]. He seeks to make federal bureaucracies more accountable to the president and Congress [3].
    • Education: Trump seeks to move control and funding of education away from DC bureaucrats directly to parents and local governments [3]. He also aims to reform the education system [7] by ending what he considers to be harmful influences, such as the promotion of LGBT issues [5, 7].
    • Foreign Policy: Trump aims to end the wars in many places and destroy the US military-industrial complex [5]. He wants to end U.S. involvement in conflicts abroad and focus on domestic issues [8, 9].
    • Afghanistan: He attempted to negotiate a deal with the Taliban [8], and he viewed the situation in Afghanistan as a test case [10]. He is critical of the way the US handled the withdrawal from Afghanistan [10]. He aims to change South Asian policies [9].
    • Middle East: Trump considers Israel to be very important [7]. He moved the American embassy to Jerusalem [7].
    • Relations with Russia: There was a reconciliation between Russia and America during Trump’s presidency [11].
    • Legal System: Trump aims to “purge” the legal system and turn it against the establishment [4]. He feels he was targeted by the legal system [4, 12].
    • Social Issues: Trump opposes abortion [4] and the LGBT movement [4, 5]. He also wants to ban biological males from competing in women’s sports [5].

    Underlying Themes and Motivations

    • Populism: Trump’s appeal is based on connecting with a “prototype image” that resonates with the American people, including stereotypes about minorities and immigrants [6].
    • Power Consolidation: Trump wants to centralize authority in the presidency [4], diminishing the power of democratic institutions.
    • Anti-Interventionism: Trump is an anti-war figure who is opposed to U.S. intervention in foreign conflicts [13].
    • Use of Media: Trump has a habit of experimenting with the media and has been compared to the Roman Emperor Caligula [4], who was known for his eccentric behavior.

    Challenges to Trump’s Agenda

    • Deep State Opposition: The deep state is actively working against Trump’s agenda [11].
    • Establishment Resistance: Trump faces resistance from the media, the military, and the civil service [12].
    • Internal Conflicts: There are internal conflicts among those who support Trump [6].
    • Legal Challenges: Trump has been targeted by numerous legal cases [12].

    It’s worth noting that these sources present a critical view of Trump and his agenda.

    The Deep State: Global Power and Resistance

    Based on the provided sources and our conversation history, here’s a discussion of the “deep state’s” power:

    Definition and Origin:

    • The “deep state” is described as a powerful entity that has been controlling not just America, but the world system, since around 1920 [1, 2]. Its influence became more solidified after the Bretton Woods Agreement was signed in 1944 [2].
    • The deep state’s control is exerted through various mechanisms, including the dollar, the IMF, the World Bank, and the United Nations [2].

    Mechanisms of Control

    • Financial Control: The deep state uses the dollar to control the global financial system. They established institutions like the IMF and the World Bank and use the United Nations to maintain this control [2].
    • Military-Industrial Complex: This complex is a key part of the deep state’s power. It includes the large capitalists of America who deal in currency, missiles, and military equipment. These groups are seen as having instigated the Cold War and various other wars to further their capital [2].
    • Media Manipulation: The deep state also controls media outlets and uses them to manipulate public opinion [3, 4].
    • Bureaucratic Power: Bureaucrats within the government, both in America and in other countries, are part of the deep state. These bureaucrats are described as being very strong and can foil agendas, including Trump’s [5].

    Actions and Influence

    • Undermining Trump: The deep state is actively working against Trump’s agenda [4]. They have used the media, the halls of power, and the military and civil service to try to defeat him [3]. They have used the courts to attack Trump through numerous legal cases [3].
    • Maintaining Conflicts: The deep state has an interest in maintaining conflicts around the world. This includes the wars in Afghanistan and Iraq, which are seen as being driven by the military-industrial complex [6]. The deep state also wanted to keep the conflict in Afghanistan going [7].
    • Control of Global Policies: It is suggested that the deep state influences global policies, including those related to South Asia, and has been manipulating the US relationship with Pakistan since 1954 [8].
    • Regime Change: The deep state is involved in regime change operations around the world [4].

    Opposition and Challenges

    • Trump’s Challenge: Trump sees himself as having come to the fore by defeating the deep state. His agenda includes dismantling the military-industrial complex, ending US involvement in foreign conflicts, and reversing what he sees as the deep state’s globalist policies [1, 2].
    • Resistance: The deep state is resisting Trump’s efforts to challenge them. They are attempting to undermine him through various means, including legal challenges and media attacks [4].

    Important Note: The sources present a critical view of the “deep state,” characterizing it as a powerful and manipulative entity. The term itself is often used in conspiracy theories, and it’s important to consider the possibility that these claims might not be fully verifiable.

    In summary, the “deep state” is portrayed in the sources as a powerful, shadowy network that controls global systems through financial, military, and political manipulation. It is seen as the primary obstacle to Trump’s agenda.

    Trump, the Deep State, and Global Power

    Based on the sources and our conversation history, here’s a discussion of global politics, particularly as they relate to Donald Trump’s agenda and the concept of the “deep state”:

    The “Deep State” and Global Control:

    • The sources describe a “deep state” as a powerful entity that has been controlling the world system since around 1920, becoming more entrenched after the 1944 Bretton Woods Agreement [1, 2].
    • This “deep state” is said to exert its influence through various mechanisms, including:
    • Financial Control: The use of the U.S. dollar as the world’s reserve currency, along with institutions like the IMF and World Bank, allows the “deep state” to control the global financial system [2]. The United Nations is also used to maintain this control [2].
    • Military-Industrial Complex: This is composed of large American capitalists who profit from manufacturing weapons, and are seen as instigators of conflicts, like the Cold War, to further their capital [2].
    • Media Manipulation: The “deep state” controls media outlets to shape public opinion [3].

    Trump’s Challenge to the Existing Global Order:

    • Anti-Globalist Stance: Trump is depicted as challenging the established global order, which he believes is controlled by the “deep state.” He aims to reverse steps toward a “new world order” [1].
    • “America First” Policy: This policy is focused on domestic issues and aims to disengage from international conflicts [1, 4].
    • Dismantling the Military-Industrial Complex: Trump is critical of the military-industrial complex and the wars it generates, especially in Afghanistan and Iraq, which he sees as driven by the interests of a few capitalists [2, 5].
    • Reversal of US Foreign Policy: Trump is viewed as seeking to alter U.S. foreign policy, particularly in South Asia [6].

    Key Areas of Global Political Conflict:

    • Middle East:Israel: Trump sees Israel as very important and moved the U.S. embassy to Jerusalem [7]. There are also internal conflicts within the US regarding Israel, with some Jewish groups protesting against Israeli policies [7].
    • Arab Nations: Arab nations are described as being dependent on the U.S. for security, which is tied to the expansion of Israel [2].
    • Syria: The “deep state” is described as attempting to initiate a revolution in Syria [8].
    • Afghanistan:US Withdrawal: The withdrawal from Afghanistan was a major issue, with Trump attempting to negotiate with the Taliban, however his efforts were undermined by the establishment [9, 10].
    • Contradictory Strategies: The US employed a strategy of building an Afghan army and arming them, which ultimately proved ineffective [10, 11].
    • South Asia: Trump is viewed as a potential “nightmare for Pakistan” due to his potential changes in South Asian policy, where the US has had a history of providing aid and support [6].
    • China:Economic Relations: Despite geopolitical tensions, the US has strong trade relations with China, with many goods made in China due to cheap labor [12].
    • Geopolitical Tensions: The presence of a US fleet in the China Sea demonstrates continued tensions [12].

    Internal Conflicts and Challenges:

    • Deep State Opposition: Trump faces significant opposition from the “deep state,” which is attempting to undermine him through legal challenges, media manipulation, and bureaucratic obstruction [3, 8, 13].
    • Establishment Resistance: Trump faces resistance from various establishment forces, including the media, the military, and the civil service [3, 8].
    • Internal Conflicts: Even within those who support Trump, there are internal conflicts and differing views on his policies [7].

    New World Order:

    • Trump’s Vision: Trump is said to want to bring a “new world order”, however this is in opposition to the existing new world order that he sees as being controlled by the deep state [1, 7].
    • Fear of Trump’s policies: Those who oppose Trump are fearful of his potential to dismantle the current global order, particularly concerning social issues like LGBT rights [7].

    Overall, the sources portray global politics as a complex web of power struggles, with Trump attempting to disrupt the established order controlled by the “deep state.” The sources emphasize the importance of economic, military, and media manipulation in maintaining this existing order. It is important to note that the “deep state” is a controversial concept and some of the claims presented are not easily verifiable.

    Trump, the Deep State, and US Foreign Policy

    Based on the provided sources and our conversation history, here’s a discussion of US foreign policy, particularly as it relates to Donald Trump and the “deep state”:

    Key Elements of US Foreign Policy According to the Sources

    • The “Deep State” and US Foreign Policy: The sources suggest that a “deep state” has significantly influenced US foreign policy since around 1920, with its power solidifying after the Bretton Woods Agreement in 1944 [1, 2]. This “deep state” uses financial mechanisms like the dollar, the IMF, and the World Bank, along with the United Nations, to control the global system [2].
    • Military-Industrial Complex: A major aspect of US foreign policy is the influence of the military-industrial complex [3]. This complex, comprised of large American capitalists who profit from arms manufacturing, is seen as a driving force behind conflicts, including the Cold War and wars in Afghanistan and Iraq [2, 3]. The US military-industrial complex is described as having benefited greatly from these conflicts [3].
    • Maintaining Global Conflicts: The “deep state” is portrayed as having an interest in maintaining conflicts around the world. This is seen in the wars in Afghanistan and Iraq, which are viewed as being driven by the military-industrial complex, and there is also a desire by the deep state to maintain conflict in Afghanistan [3, 4].

    Trump’s Challenge to US Foreign Policy

    • “America First” Policy: Trump’s foreign policy is characterized by an “America First” approach that prioritizes domestic issues and disengagement from international conflicts [1, 5].
    • Anti-Interventionist Stance: Trump is depicted as being against unnecessary foreign intervention, particularly military actions in places like Afghanistan and Iraq [3]. He is critical of the existing global order [1, 5].
    • Dismantling the Military-Industrial Complex: Trump aims to dismantle the military-industrial complex, which he sees as a source of unnecessary wars and financial exploitation [3].
    • Reversal of US Foreign Policy: Trump is viewed as seeking to alter U.S. foreign policy, particularly in South Asia [5].

    Specific Regions and Issues

    • Middle East:Israel: Trump moved the U.S. embassy to Jerusalem, despite opposition, because he believed that a Jewish temple should be built there so that Jesus would come and punish those who crucified him [6].
    • Arab Nations: The US has influenced Arab nations to be dependent on it for security due to the expansion of Israel [2].
    • Syria: The “deep state” is described as trying to start a revolution in Syria [7].
    • Afghanistan:US Withdrawal: Trump attempted to negotiate with the Taliban and withdraw US forces, but these efforts were undermined by the establishment [8, 9].
    • Failed US Strategy: The US strategy of building and training an Afghan army is described as having failed. This army was ultimately ineffective against the Taliban [4, 9].
    • South Asia: The sources suggest that Trump’s policies could be a “nightmare for Pakistan” [5]. The US has a long history of providing aid and support to Pakistan, but Trump is viewed as potentially ending this relationship due to a change in his South Asian strategy [5].
    • China: Despite tensions, the US has strong trade relations with China, where many goods are produced due to cheap labor [10]. There is a US naval presence in the China Sea, which has not been contested by China [10].

    Internal Conflicts and Challenges

    • Deep State Opposition: Trump has faced resistance from the “deep state” which uses legal challenges, media manipulation, and bureaucratic obstruction to undermine his foreign policy goals [11, 12].
    • Establishment Resistance: Trump has also faced opposition from establishment forces, including the media, the military, and the civil service [11, 12].
    • Conflicting Goals: There are internal conflicts and varying viewpoints, even among Trump’s supporters, regarding his foreign policies [6].

    US Foreign Policy and the New World Order

    • Trump’s Vision: Trump wants to bring a “new world order,” but one that counters the existing order controlled by the “deep state” [6].
    • Opposition to Trump’s policies: There is fear among some that Trump’s policies could dismantle the current global order, especially regarding social issues like LGBT rights [6].

    In summary, the sources portray US foreign policy as being heavily influenced by the “deep state” and the military-industrial complex, with Trump attempting to reverse this established order through an “America First” approach. Trump’s policies are viewed as being anti-interventionist and seeking to reduce US involvement in global conflicts. The sources also highlight the internal and external challenges that Trump has faced in trying to implement his foreign policy vision. The concept of a “deep state” is controversial, and it is important to approach claims related to this concept with caution.

    Pakistan’s Future Under Trump

    Based on the provided sources and our conversation history, here’s a discussion of Pakistan’s potential future, particularly as it relates to Donald Trump and the global political landscape:

    Pakistan’s Current Situation

    • Dependent on Foreign Aid: Pakistan is described as being heavily reliant on foreign aid and financial assistance from organizations like the IMF and USAID [1]. This dependence has been ongoing since 1954 [1].
    • Internal Divisions: There is an internal conflict between the Pakistani establishment and the youth of Pakistan, who are aware of the country’s limitations [2].
    • Instability: The sources indicate that Pakistan has been involved in conflicts and instability, particularly along its border with Afghanistan, and this instability is linked to US foreign policy [3].
    • Strained Relationship with the US: The sources suggest that Pakistan has been a close ally of the US, particularly in the fight against terrorism and as a partner in the Cold War [1], but that this relationship is potentially at risk with a change in US policy [1].

    Trump’s Potential Impact on Pakistan

    • Nightmare for Pakistan: Trump’s potential policies are described as a “big nightmare” for Pakistan [1, 2]. This is because he is viewed as seeking to reverse the existing foreign policy of the US [2].
    • End of US Support: Trump is viewed as potentially ending the US’s reliance on Pakistan as a strategic partner in the region, which could significantly affect the country’s financial and political stability [1].
    • Shift in South Asia Policy: Trump’s South Asia policy is described as focusing on Afghanistan, Pakistan, and India [1]. His aim is to create stability in Afghanistan, and he may view Pakistan as an obstacle to this [1].
    • Reduced Importance: The sources suggest that if Pakistan is no longer seen as a necessary ally in the region, its strategic importance and its “love status” with the US will diminish [1].

    Pakistan’s Role in Regional Conflicts

    • Afghanistan: Pakistan was involved in trying to establish peace in Afghanistan and there was an attempt to bring Imran Khan to power [3]. However, the US wanted to maintain instability in Afghanistan, creating conflict [3]. The sources indicate that there is now peace in Afghanistan but Pakistan is facing the negative consequences of that instability [3].
    • Iran: The sources note that the US would like Pakistan to fight a war with Iran due to Israeli pressure [4]. However, this has not happened and may be unlikely [4].
    • Border Conflicts: The sources suggest that Pakistan has been involved in conflicts along its border with Afghanistan, and this is linked to the desire of the US to destabilize the region [3].

    Internal Challenges

    • Economic Dependence: The country is heavily dependent on foreign aid and loans which limits its autonomy [1].
    • Political Instability: There are internal political divisions within the country, and the deep state is described as trying to destabilize Pakistan through various methods [5, 6].
    • Public Awareness: The youth of Pakistan is described as being aware of the extent of Pakistan’s limitations [2].

    Potential Future Scenarios

    • Reduced US Support: If Trump’s policies are implemented, Pakistan could face a significant reduction in US aid and support, which could further destabilize the country [1].
    • Increased Internal Pressure: With less external support, Pakistan may face increased internal pressure and instability [2].
    • Shift in Regional Dynamics: Trump’s policies could alter the geopolitical landscape in South Asia, potentially leading to new alliances and conflicts [1].
    • Economic Challenges: Without US aid, Pakistan could face economic challenges [1].
    • Focus on Internal Affairs: Pakistan may need to prioritize internal development and stability, given that it may lose its geopolitical importance to the US [2].

    Key Takeaways

    • Uncertainty: Pakistan’s future is uncertain, as it is dependent on US foreign policy, and Trump’s policies could significantly alter its situation [1].
    • Internal and External Pressures: Pakistan is facing a combination of internal divisions and external pressures, which could destabilize the country [2, 3].
    • Potential for Change: There is a potential for significant changes in Pakistan’s geopolitical standing in the region based on the outcome of the US election [1].

    In summary, the sources suggest that Pakistan’s future is closely linked to US foreign policy and the actions of Donald Trump, and that Trump’s policies could create a difficult situation for Pakistan, ending the country’s strategic alliance with the US. The sources also indicate that the country is facing numerous internal and external challenges which could impact its stability.

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog

  • Iran News International 17-Feb-2025 Global Headlines: Mideast Tensions, Ukraine Talks, and Lebanese Politics

    Iran News International 17-Feb-2025 Global Headlines: Mideast Tensions, Ukraine Talks, and Lebanese Politics

    This news broadcast covers several developing international situations. It reports on escalating tensions between the United States, Israel, and Iran concerning Iran’s nuclear program, including the deployment of US B-52 bombers to the Middle East and diplomatic efforts involving Saudi Arabia. The broadcast also examines internal and external issues facing Lebanon’s new government, especially regarding Hezbollah’s influence and the country’s relationship with Syria and other countries. Finally, it addresses upcoming US-Russia talks on the war in Ukraine without Ukraine’s participation, sparking concerns among European leaders and Zelensky about transatlantic relations. The tone is one of analysis, reporting on potential negotiations, possible military actions, and shifting political landscapes. Several experts are interviewed to provide insight on the issues.

    Middle East Tensions and Geopolitical Shifts: A Study Guide

    Quiz

    Answer each question in 2-3 sentences.

    1. What was the significance of the B-52H bomber flight data and where were they headed?
    2. What conditions did the US, represented by Rubio and Trump’s advisor Wallace, set for negotiations with the Islamic Republic?
    3. What role is Saudi Arabia willing to play in the potential negotiations between the United States and the Islamic Republic?
    4. According to Hossein Aghaei, what are the two options being discussed in relation to the Islamic Republic’s nuclear facilities, and which one is more likely?
    5. What are the contradictory reports about the protests in Dehdasht, Iran, and what do they suggest about the government’s approach?
    6. What are the criticisms levied against Prince Reza Pahlavi regarding the composition of his close associates and his claim to leadership?
    7. What is the Lebanese government trying to achieve by excluding Hezbollah from the cabinet?
    8. What specific actions has the Lebanese government taken to reduce Hezbollah’s influence?
    9. What are the reasons behind the ban on flights to Beirut International Airport, and how does this affect Hezbollah’s operations?
    10. What is Zelensky’s reaction to the US-Russia negotiations on the war in Ukraine without Ukraine’s presence?

    Quiz Answer Key

    1. The flight data of two US Air Force B-52H bombers showed their departure from the UK towards the Middle East, emphasizing the seriousness of the US’s stance amid heightened tensions with the Islamic Republic. This flight suggests a show of force and potential military readiness in the region, particularly in light of ongoing nuclear debates.
    2. The US set the condition that the Islamic Republic must completely dismantle its nuclear program, including reducing centrifuges and stopping uranium enrichment, as a prerequisite for any negotiations to begin. These demands reflect the US’s firm stance against the Islamic Republic’s nuclear ambitions and its commitment to preventing nuclear proliferation.
    3. Saudi Arabia has offered to mediate between the United States and the Islamic Republic in order to facilitate negotiations, which is a new phenomenon compared to the Obama era. This willingness indicates Saudi Arabia’s desire to play a more active role in regional diplomacy and security.
    4. According to Hossein Aghaei, the two options being discussed are negotiations and an attack on the Islamic Republic’s nuclear facilities. He believes that military pressure and serious threats are more likely if the Islamic Republic does not quickly make concessions sought by the US.
    5. There are contradictory reports about the protests in Dehdasht, with the IRGC Intelligence Organization reporting the arrest of protest leaders for sabotage, while the provincial police chief denies the protests ever occurred. These contradictory reports indicate an attempt by the government to downplay the significance of the protests and suppress dissent while controlling the narrative.
    6. Criticisms against Prince Reza Pahlavi include concerns about the lack of diversity among his close associates, who primarily represent a specific political spectrum. He is also criticized for claiming leadership of the transition period without broader recognition from other political parties or opposition groups.
    7. By excluding Hezbollah from the cabinet, the Lebanese government is trying to reduce the group’s influence to the lowest possible level. This action is aimed at weakening Hezbollah’s political power and limiting its ability to veto important government decisions.
    8. The Lebanese government’s actions include electing a president and prime minister who are not aligned with Hezbollah, forming a cabinet without Hezbollah members, and supporting the ban on flights to Beirut International Airport, which were allegedly used to transport money and weapons to Hezbollah. These moves are aimed at diminishing Hezbollah’s political power and operational capabilities.
    9. The ban on flights to Beirut International Airport is due to concerns that these flights were carrying large amounts of money and potentially weapons to Hezbollah. This ban is intended to cut off a crucial supply route for Hezbollah, hindering its ability to rebuild and resume operations.
    10. Zelensky has stated that Ukraine does not recognize the US-Russia negotiations, highlighting Ukraine’s opposition to being excluded from discussions about its own future and security. This reaction underscores Ukraine’s insistence on being a central participant in any diplomatic efforts to resolve the conflict.

    Essay Questions

    1. Analyze the strategic implications of the US military presence in the Middle East, considering the flight of the B-52H bombers and the potential for either negotiation or military action against the Islamic Republic.
    2. Assess the impact of Saudi Arabia’s willingness to mediate between the United States and the Islamic Republic on regional power dynamics and the prospects for diplomatic resolution.
    3. Discuss the significance of the protests in Dehdasht, Iran, and the conflicting reports surrounding them, in the context of broader domestic challenges facing the Islamic Republic.
    4. Evaluate the potential for a new, independent Shiite movement to emerge in Lebanon, considering the current government’s efforts to reduce Hezbollah’s influence and separate the Shiite population from the group.
    5. Examine the implications of the US-Russia negotiations on the war in Ukraine, particularly in light of Zelensky’s opposition and the potential reshaping of transatlantic relations.

    Glossary of Key Terms

    • B-52H Bombers: Long-range, heavy bomber aircraft used by the United States Air Force, capable of carrying a wide array of munitions, including nuclear weapons.
    • JCPOA (Joint Comprehensive Plan of Action): An international agreement on the nuclear program of Iran reached in Vienna on 14 July 2015 between Iran, the P5+1 (the five permanent members of the United Nations Security Council—China, France, Russia, United Kingdom, United States—plus Germany), and the European Union.
    • Islamic Republic: A term referring to the government of Iran, which is based on Islamic principles and law.
    • Hezbollah: A Lebanese Shia Islamist political party and militant group, heavily supported by Iran.
    • Centrifuges: Devices used to enrich uranium for nuclear fuel or weapons.
    • Uranium Enrichment: The process of increasing the concentration of the isotope Uranium-235 in natural uranium to produce fuel for nuclear reactors or material for nuclear weapons.
    • IRGC (Islamic Revolutionary Guard Corps): A branch of the Iranian Armed Forces, separate from the regular army, tasked with protecting the country’s Islamic system.
    • Rafik Hariri Airport: The main international airport in Beirut, Lebanon.
    • Shiite Movement: A branch of Islam whose adherents believe that the leadership of the Muslim world should be passed down through the direct descendants of Muhammad.
    • Transatlantic Relations: The political, economic, and cultural relations between North America and Europe.
    • Rastakhiz Party: A former political party in Iran, founded by Mohammad Reza Pahlavi in 1975.
    • SAVAK: The secret police, domestic security and intelligence service in Iran during the reign of the Pahlavi dynasty.
    • Liberal Democrat: A political ideology combining liberal politics with a more overt commitment to social justice.
    • Reformists: Individuals or groups advocating for gradual change and improvement in a political or social system.
    • Fundamentalist: A strict adherence to the basic principles of any subject or discipline.
    • Monarchists: Individuals or groups who support a system of government headed by a monarch.
    • Republicans: Individuals or groups advocating for a form of government in which the head of state is not a monarch, typically an elected president.
    • Constituent Assembly: A body or assembly of popularly elected delegates which is assembled for the purpose of drafting or adopting a constitution or similar document.
    • Deterrence: The action of discouraging an action or event through instilling doubt or fear of the consequences.
    • Decline Factor: Internal conditions and trends that can weaken or undermine the stability and power of a state or regime.
    • Strategic Point: A location or position of military or political importance.

    Middle East Geopolitics and US-Russia Negotiations Analysis

    Okay, here’s a detailed briefing document summarizing the key themes and ideas from the provided text.

    Briefing Document: Analysis of News Headlines

    Date: October 26, 2023 (based on the Monday, February 29th, reference) Subject: Analysis of Geopolitical Tensions and Domestic Unrest in Iran and the Middle East.

    Executive Summary:

    This document analyzes a series of news headlines and discussions covering escalating tensions between the US, Israel, and Iran, domestic unrest in Iran, political maneuvering surrounding Prince Reza Pahlavi, and the complex situation in Lebanon, as well as US-Russia talks on Ukraine. The overarching themes are: the increasing possibility of confrontation between Iran and its adversaries, internal dissent within Iran, shifting alliances in the Middle East, and the potential for a new geopolitical order.

    Key Themes and Ideas:

    1. Escalating US-Iran Tensions and Nuclear Concerns:

    • Threat of Military Action: The deployment of US B-52 bombers to the Middle East, coupled with statements from US and Israeli officials, suggests a heightened threat of military action against Iran’s nuclear facilities. “Two US Air Force B-52H bombers departed from the UK’s Fay Ford Air Base, accompanied by at least 4 tanker aircraft, and crossed the Mediterranean Sea towards the Middle East.” Mark Rubio and Netanyahu “emphasized that they will not allow Tehran to obtain nuclear weapons.”
    • Preconditions for Negotiation: The US is setting strict preconditions for negotiations with Iran, including the complete dismantling of its nuclear program. “Mr. Wallace has raised the point that the Islamic Republic must put aside its entire nuclear program… Mr. Rubio… believes that the Islamic Republic must put aside all of its nuclear ambitions altogether, and this could be a prelude to starting negotiations with the Islamic Republic.”
    • Iranian Defiance: Iranian officials are publicly dismissing the threats and asserting their defensive capabilities, though some analysts believe this is primarily for domestic consumption. “The Leader of the Islamic Republic, Ali Khamenei, also said in a speech that our issue is not a hardware or defense threat, and there is no problem in this regard.” One analyst stated that the Iranian Leaders view that the “Islamic Republic has absolutely no problems in terms of defense capabilities… are primarily misleading, incorrect, contrary to the facts on the ground.”
    • Saudi Mediation: Saudi Arabia is offering to mediate between the US and Iran, indicating a potential shift in regional dynamics and a desire to de-escalate tensions. “Riyadh and Saudi Arabia are willing to mediate between the United States and the Islamic Republic in order for negotiations to take place.”
    • Diplomatic Window: The “diplomatic window” for negotiations is considered very limited and that increased military pressure is being considered. “The diplomatic window that Trump has opened will be very, very limited. I think that the maximum will be this summer at best, and it may not even reach that time.”

    2. Internal Unrest and Political Division in Iran:

    • Protests in Dehdasht: Reports of protests in Dehdasht, Iran, are met with contradictory official responses, with some sources denying the protests occurred and others reporting arrests of protest leaders. “Contradictory statements about the Dehdasht protest rallies continue, while the Kohgilu police commander has completely denied the occurrence of the rally in Dehdasht.”
    • Criticism of Leadership and Dissension: Dissension and unrest in the population are creating a “factor of decline” that are creating internal fears within the Republic. “The main source of concern for the Islamic Republic is internal rather than external. They are trying to prevent that collapse factor in some way.”
    • Prince Reza Pahlavi’s Role: The role and potential leadership of Prince Reza Pahlavi, is generating discussion, with some moderate groups welcoming his pronouncements and other groups questioning those around him. “Prince Reza Pahlavi’s comments criticizing the slogan ‘King Reza Pahlavi’ not to insult the opposition and not to raise the issue of monarchy or republic at the current stage… More moderate groups are welcoming the talks of Prince Reza Pahlavi.” However, others state that “we don’t see this diversity among his main close associates.”
    • Lack of Unified Opposition: The lack of a unified opposition is being criticized, with some arguing that critics of Pahlavi should focus on organizing themselves instead of solely criticizing him. “The time for you to criticize Mr. Pahlavi but not organize yourself… not be able to present an alternative leadership is over.”

    3. Lebanon’s Internal and External Challenges:

    • Israeli Withdrawal and Hezbollah: Lebanon faces both the issue of Israel’s withdrawal from southern Lebanon and the need to manage Hezbollah’s influence within the country. The Lebanese government faces external pressures from Israel and internal tensions related to Hezbollah’s power. “The Israeli issue, which is due to withdraw from southern Lebanon tomorrow, coincident with the end of the 60-day ceasefire with Hezbollah.”
    • Reduced Hezbollah Influence: The new Lebanese government is attempting to reduce Hezbollah’s influence, including excluding them from cabinet positions, supported by US policy. “The current Lebanese government is trying to reduce Hezbollah’s influence to the lowest possible level.”
    • Saudi Support for Lebanese Government: Saudi Arabia’s support for the Lebanese government signifies a shift in regional power dynamics and a challenge to Iran’s influence. “Saudi Arabia’s support for the Lebanese government in dealing with the protesters is another sign of the new balance of power in Lebanon, which will not be good news for the Islamic Republic, the party’s main supporter.”
    • New Shiite Movement: The possible emergence of a new Shiite movement independent of Hezbollah and Iran is being speculated on. “I think we are witnessing the birth of a new Shiite movement in Lebanon, which is neither Hezbollah nor Amal, a Shiite movement that has learned from and no longer wants to be subordinate to a foreign country.”

    4. US-Russia Negotiations on Ukraine:

    • Negotiations without Ukraine and Europe: The US is engaging in negotiations with Russia on the war in Ukraine without the direct involvement of Ukraine or European countries, causing concern among those parties. “US Secretary of State Mark Rubio, along with the National Security Advisor and the US Special Envoy for the Middle East, will meet with Russian representatives… Zelensky… said that we do not recognize the US-Russia negotiations.”
    • Trump’s Approach: Donald Trump is taking a different approach to the conflict, prioritizing negotiations and potentially seeking a quick resolution, which is causing friction with transatlantic allies. “Mr. Trump is rewriting transatlantic relations, that is, relations between the two sides of the Atlantic Ocean.”
    • Potential Outcome: The implications of these negotiations for the future of Ukraine and European security are uncertain. “Kremlin spokesman Dmitry Peskov has also confirmed that representatives from the Russian Federation are going to be present. This will be the first stage, so that the two sides can sit down and work out their differences.”

    Conclusion:

    The news headlines paint a picture of a volatile and uncertain geopolitical landscape. The potential for conflict in the Middle East, coupled with internal challenges within Iran and shifting alliances, highlights the need for careful diplomacy and strategic planning. The US-Russia negotiations on Ukraine also point to a potential reshaping of the international order. These developments will require close monitoring and analysis in the coming weeks.

    US, Iran, and Middle East Tensions: Analysis and Developments

    FAQ

    • What is the significance of the US Air Force B-52H bombers being deployed to the Middle East? The deployment of B-52H bombers to the Middle East, especially following threats from Rubio and Netanyahu against Iran, is a significant show of force and a signal of the US and Israel’s determination to prevent Iran from obtaining nuclear weapons. It suggests a potential escalation of tensions and a readiness to consider military options, although it could also be interpreted as a deterrent intended to bring Iran to the negotiating table.
    • What are the preconditions for negotiations between the US and Iran, according to US officials? According to remarks attributed to Mr. Wallace, Trump’s National Security Advisor, and US Secretary of State Rubio, a key precondition for negotiations between the US and Iran is that Iran must completely dismantle its nuclear program, including ceasing uranium enrichment and reducing its centrifuges. This position aligns with Trump’s stated desire for negotiations, but only under stringent conditions.
    • What role is Saudi Arabia attempting to play in the US-Iran dynamic? Saudi Arabia has expressed a willingness to mediate between the US and Iran. This marks a shift from the Obama era, where the US did not seek Saudi Arabia’s input on the JCPOA. Saudi Arabia’s involvement suggests a regional desire for de-escalation, but also a preference for a deal that addresses their concerns about Iran’s regional influence and nuclear ambitions.
    • What is Ali Khamenei’s response to the increasing pressure and threats from the US and Israel? Ali Khamenei has dismissed concerns about Iran’s defense capabilities, stating that Iran has no problems in this regard and is ready to confront serious threats. However, experts cited in the broadcast suggest that these statements are primarily for domestic consumption and may not accurately reflect the actual situation. The Islamic Republic may be more concerned with internal factors and a potential decline in domestic support.
    • What is happening with the protests in Dehdasht, Iran, and how are they being reported? Protests have taken place in Dehdasht, with citizens chanting anti-government slogans. However, the Iranian government’s media approach has been one of denial. While some news agencies affiliated with the IRGC have reported arrests of individuals allegedly planning sabotage, others deny the protests even occurred. This contradictory reporting and the reported use of violence against protesters indicate a sensitive security situation and an effort by the government to suppress dissent and control information.
    • What are the different perspectives on Prince Reza Pahlavi’s role and leadership within the Iranian opposition? Prince Reza Pahlavi’s recent comments at a convergence meeting have sparked debate among the Iranian opposition. While some, particularly more moderate groups, welcome his criticisms of extremist rhetoric and calls for unity, others criticize the lack of diversity among his close associates and question his self-proclaimed leadership of the transition period. Some argue that those around him push polarizing views. There are conflicting opinions regarding whether he is a unifying figure or is surrounded by advisors who are too partisan and right-wing.
    • What is the situation with Hezbollah and the Lebanese government, and what is Saudi Arabia’s role? The Lebanese government, under President Joseph O’Neill and Prime Minister Nawab Salam, is facing both external pressure from Israel and internal challenges related to Hezbollah’s influence. The new government is trying to reduce Hezbollah’s influence, culminating in a cabinet without Hezbollah members. Saudi Arabia is supporting the Lebanese government, signaling a new balance of power in Lebanon that is unfavorable to Iran, Hezbollah’s main supporter.
    • What is the status of US-Russia negotiations on the war in Ukraine, and how are European leaders and Zelensky reacting? The US and Russia are scheduled to hold negotiations in Riyadh regarding the war in Ukraine, without the presence of Kiev or European countries. Zelensky has stated that Ukraine does not recognize these negotiations. European leaders are holding emergency meetings to discuss their response, amidst growing pressure from the US for them to shoulder more of the financial burden of supporting Ukraine. The situation reflects a potential shift in transatlantic relations and concerns about the future of the conflict.

    US-Iran Tensions: Nuclear Program, Military Threats, and Negotiations

    Tensions between the U.S. and Iran are a prominent topic in the news, particularly regarding Iran’s nuclear program and regional influence. Here’s a breakdown of the situation:

    • Nuclear Ambitions: The U.S., along with Israel, is concerned about Iran’s pursuit of nuclear weapons. Both countries have stated they will not allow Iran to obtain them. The U.S. has indicated that negotiations with Iran are contingent on Iran completely halting uranium enrichment and dismantling its centrifuges.
    • Military Threats and Deterrence: The U.S. has sent B-52H bombers to the Middle East as a signal of its commitment to prevent Iran from acquiring nuclear weapons and to deter military action. There are discussions about potential military actions against Iran’s nuclear facilities if negotiations fail.
    • Iranian Response: Iran maintains that its nuclear program is for peaceful purposes. Iranian officials have asserted that threats against Iran are a violation of international law and that Israel “cannot do anything wrong”. Iran’s Leader, Ali Khamenei, has stated that the country’s defense capabilities are robust, though some analysts believe this is primarily for domestic consumption to prevent internal dissent.
    • Negotiation Prospects: There are talks of potential mediation by Saudi Arabia or Russia between the U.S. and Iran. However, the U.S. conditions for negotiation, which include eliminating all perceived threats from Iran, may be difficult for Iran to accept in a short timeframe. Some analysts believe the window for diplomacy is limited.
    • Regional Influence: Iran’s regional influence is also a point of contention. Israel believes Iran is trying to compensate for its reduced regional influence by developing nuclear weapons.

    Nuclear Negotiations: US and Iranian Perspectives

    Here’s what the sources and our conversation history say about nuclear negotiations and related issues:

    • Conditions for Negotiation: The U.S. has indicated that any negotiations with the Islamic Republic of Iran are conditional on Iran’s willingness to significantly reduce its centrifuges and completely stop enriching uranium. The U.S. preconditions also include eliminating all combined threats from the Islamic Republic, with a focus on the nuclear issue.
    • U.S. Stance: The U.S., under the Trump administration, is seeking negotiations with Iran but insists that these negotiations will only commence when Iran demonstrates a willingness to curtail its nuclear program. The seriousness of the United States and Israel in preventing the Islamic Republic from obtaining nuclear weapons has become more prominent.
    • Iranian Perspective: An excerpt indicates that the Islamic Republic might be ready to do anything to have the sanctions lifted. However, it seems unlikely that the Islamic Republic will want to make concessions in the shortest possible time in relation to all those combined threats.
    • Potential Mediation: There is potential for Saudi Arabia and even Russia to mediate between the U.S. and the Islamic Republic.
    • Limited Diplomatic Window: The diplomatic window that Trump has opened will be very limited, perhaps only until the summer. It is unlikely that Trump will allow the Islamic Republic to waste time if it does not intend to negotiate and make the concessions sought by the U.S..
    • Consequences of No Deal: If the Islamic Republic does not come to the negotiating table and offer the concessions sought by the U.S., the U.S. and Israel may enter a military phase or make credible and serious military threats against the Islamic Republic.
    • Iranian Nuclear Ambitions: Israel believes that Tehran is trying to compensate for its reduced regional influence by producing nuclear weapons. Gideon O’Sarr confirmed that Israel will not allow the Islamic Republic to obtain nuclear weapons.
    • B-52 Bomber Flights: The United States Air Force sent B-52H bombers to the Middle East, which could be seen as a signal to the Islamic Republic regarding America’s determination to confront a military attack on the nuclear facilities of the Islamic Republic.

    Lebanon’s Government: Challenges, Composition, and Hezbollah’s Influence

    The Lebanese government faces significant internal and external crises. Here’s a summary of the key points regarding Lebanon’s government:

    • External Pressures: The Lebanese government is dealing with the issue of Israel’s presence in southern Lebanon and is trying to ensure Israel withdraws on time through political and diplomatic efforts.
    • Internal Challenges with Hezbollah: The Lebanese government is trying to reduce Hezbollah’s influence. The current Lebanese government, unlike previous ones, does not include any Hezbollah members, which is an unprecedented development.
    • Government Composition: Joseph Onn was elected as the country’s president, and Nawaf Salam was elected as the prime minister despite Hezbollah’s opposition. The current cabinet does not include any Hezbollah members, preventing them from vetoing important decisions.
    • U.S. Influence: The U.S. has been দ্রুত in opposing Hezbollah’s presence in the Lebanese government, with the U.S. administration stating that a strong Lebanese government that can depose Hezbollah is its goal.
    • Recent Clashes: Recent clashes around Beirut’s Rafik Hariri Airport and the ban on flights to Lebanon are signs of Hezbollah’s increasing predicament.
    • Saudi Arabia’s Support: Saudi Arabia is supporting the Lebanese government in dealing with protesters, which is indicative of a new balance of power in Lebanon that is not favorable for Iran, Hezbollah’s main supporter.
    • Efforts to Separate Shiite Identity from Hezbollah: The Lebanese government is trying to separate the Shiite community from Hezbollah, as millions of Shiites live in Lebanon, and the government aims to create a new Shiite movement that is not subordinate to a foreign country and wants to integrate with other Lebanese groups.
    • Hezbollah’s Revival Efforts: Hezbollah is planning a grand event to announce its revival, but the Lebanese government has closed an air route that was allegedly used to transport money and weapons to them.

    Dehdasht Protests: Anti-Government Unrest, Arrests, and Media Response

    Here’s what the sources say about the Dehdasht protests:

    • Protests and Slogans: Protests occurred in Dehdasht, with citizens chanting anti-government slogans. These protests followed a pattern seen in many parts of the country.
    • Timing: The Dehdasht protests began on the evening of the 2nd of Bahman and continued for at least four nights.
    • Media Coverage and Government Response: Initially, the Islamic Republic’s media denied the occurrence of the Dehdasht protests. Later, the Fars News Agency, affiliated with the Revolutionary Guard Corps (IRGC), reported the arrest of individuals described as leaders and ringleaders of the protests. However, this report did not explicitly acknowledge that protests had taken place, instead claiming that the arrested individuals intended to carry out sabotage.
    • Contradictory Statements: There have been contradictory statements regarding the Dehdasht protests. While the Fars News Agency reported arrests, the provincial police chief denied that any gathering had occurred.
    • Arrests and Violence: Reports and images indicate that direct shooting was carried out against protesting citizens. Human rights media have published the names of at least 25 people reportedly arrested in Dehdasht by the IRGC Intelligence Organization and the Ministry of Intelligence. The arrests were accompanied by violence.
    • Security Atmosphere: A security atmosphere prevails in Dehdasht following the protests.
    • Past Activism: Dehdasht was also an active city in the Women’s Uprising of Freedom protests, during which at least two people were killed.
    • Allegations Against News: There are claims that certain media outlets undermine Prince Reza Pahlavi, attacking those around him with unsubstantiated claims.

    US-Russia Negotiations on Ukraine: A Summary of Perspectives

    Here’s what the sources say about the Ukraine war:

    • US-Russia Negotiations: The U.S. and Russia are holding negotiations in Riyadh regarding the war in Ukraine. These negotiations are occurring without the presence of Kiev or European countries.
    • US Representatives: Mark Rubio, along with the National Security Advisor and the US Special Envoy for the Middle East, will meet with Russian representatives.
    • Zelensky’s Stance: Zelensky has stated that Ukraine does not recognize the US-Russia negotiations.
    • European Response: An emergency meeting of European leaders began in Paris. They are determining their next steps and how to have a foothold in the negotiations between the U.S. and Russia.
    • Trump’s Perspective: Donald Trump believes that both sides consider the war to be over and will probably meet with Putin soon.
    • American Press: Headlines in the American press are full of ambiguities. Bloomberg reports that Zelensky considers talks without Ukraine to be dangerous. The Wall Street Journal notes that Trump is rewriting transatlantic relations.
    • Kremlin Confirmation: Kremlin spokesman Dmitry Peskov has confirmed that representatives from the Russian Federation will be present at the negotiations.
    • US Explanation to Zelensky: Trump’s special envoy for Ukraine, Keith Kluge, told Zelensky that past peace efforts failed because too many parties were involved. Kluge has stated that it is in the interest of Ukraine and Europe to sit out the initial talks between the US and Russia to allow the two countries to work out their differences.
    • Jay Dunes’s Speech: Jay Dunes criticized European Union leaders for not defending democracy and for putting the cost of defending Ukraine on American voters and taxpayers. He specifically criticized Germany, which is heading towards elections during a turbulent political atmosphere.
    تیتر اول با نیوشا صارمی: پرواز دو بمب‌افکن بی‌۵۲ به سمت خاورمیانه، هشدار برای تهران؟

    The Original Text

    In the first headline tonight with me Nyusha Sarmi B-52 bombers on their way to the Middle East One day after Ruby and Netanyahu’s threatening speech against the Islamic Republic, Khamenei said we are ready to confront serious threats and that my defense is fine Domestic and foreign crisis in Lebanon Israel’s presence and the country’s government’s pressure on Hezbollah after the formation of a cabinet without the presence of members of this group affiliated with the Islamic Republic and Riyadh hosting US-Russian talks on Ukraine without the presence of Kiev Zelensky says we do not recognize the talks Welcome to the first headline Good morning Welcome to the first headline today, Monday’s flight data shows that two US Air Force B-52H bombers departed from the UK’s Fay Ford Air Base, accompanied by at least 4 tanker aircraft, and crossed the Mediterranean Sea towards the Middle East Yesterday, Mark Rubio and Netanyahu emphasized that they will not allow Tehran to obtain nuclear weapons The US Secretary of State today, in response to a question about a possible Israeli attack on the Islamic Republic’s nuclear facilities and Donald Trump’s position on the matter, said that Israel will act based on its national interests Today The Leader of the Islamic Republic, Ali Khamenei, also said in a speech that our issue is not a hardware or defense threat, and there is no problem in this regard. The spokesman for the Iranian Foreign Ministry also said that Israel cannot do anything wrong. Threatening others is a gross violation of international law and the UN Charter, and that in relation to a country like the Islamic Republic of Iran, his answer is that he cannot do anything wrong. At the same time, the Israeli Foreign Minister said today that Tehran is trying to compensate for its reduced regional influence by producing nuclear weapons. Gideon O’Sarr confirmed that his country will not allow the Islamic Republic to obtain nuclear weapons. We will examine this and other news during the program with a team of experts and journalists, but first of all, we will go directly to the White House in the US capital. My colleague Samira Karai is there to talk to her more. Samira, after Marco Rubio’s visit to Israel, perhaps it can be said that now we can have a more accurate picture of what both sides, specifically Israel and the United States, have in mind to confront the issue of the Islamic Republic, and specifically if we look at Mr. Wallace, Mr. Trump’s National Security Advisor,’s remarks about the preconditions for negotiations. We know that no preconditions have been officially announced, but Mr. Wallace has raised the point that the Islamic Republic must put aside its entire nuclear program. Let’s look at what Mr. Rubio, the US Secretary of State, said. He also believes that the Islamic Republic must put aside all of its nuclear ambitions altogether, and this could be a prelude to starting negotiations with the Islamic Republic. So what we know now is that Mr. Trump has been saying in recent weeks that he is looking for negotiations, but negotiations will only begin when the Islamic Republic is willing to completely reduce its centrifuges, to completely stop enriching uranium, and this is a condition for these negotiations to take place. On the other hand, we heard that Riyadh and Saudi Arabia are willing to mediate between the United States and the Islamic Republic in order for negotiations to take place. This is also an interesting phenomenon. It is a new phenomenon during the Obama era. Although Saudi Arabia officially welcomed The JCPOA, but it was never interfered with. Obama never asked Saudi Arabia or the countries in the region what they thought about the JCPOA. Now we see that Saudi Arabia is willing to play a role in these negotiations and to support this. So the overall picture is that if Saudi Arabia wants to be involved, if the words of the European diplomat that were made a while ago that the Islamic Republic is ready to do anything to have the sanctions lifted, if we look at all of this in a nutshell, it means that the Islamic Republic must agree to shut down its entire nuclear program. What happened in Libya, for example, and negotiations after that, will probably be the same negotiations in the region. On the other hand, the seriousness of the United States and Israel in not letting the Islamic Republic get its own nuclear weapons has become more prominent than ever. They will not allow the Islamic Republic to do so under any circumstances. The flight of these B- 52Hs could also be noteworthy in these days when we are hearing so much about the Islamic Republic and the nuclear debate. The British take off with the B-52. H-4 is also accompanying them. They are entering the Middle East from Italy. This is also a point of interest. These developments in Nyusha are continuing. We need to see whether they will talk more about the Islamic Republic’s nuclear issue during their trip to Riyadh. Thank you. My colleague Samira Qarai was with us from in front of the White House. But we will continue with Hossein Aghaei, a researcher in international relations and strategic affairs. Mr. Mr. It seems that the countdown has begun for one of the two options that have been discussed in the past few days, negotiations or an attack on the Islamic Republic’s nuclear facilities. If there is an appointment for negotiations, it should be clear in the next week or two. It may be so. However, the diplomatic window that Trump has opened will be very, very limited. I think that the maximum will be this summer at best, and it may not even reach that time. In any case, it is the Islamic Republic that will decide, although there is some talk about mediation from Saudi Arabia or even Russia right now. It seems unlikely that Putin and Trump will hold talks themselves. If the conditions set by the US are somehow in line with the White House’s instructions, which is to eliminate all the combined threats of the Islamic Republic, focusing on the nuclear issue, if that continues, any mediation is also assumed. It seems unlikely that the Islamic Republic will want to make concessions in the shortest possible time in relation to all those combined threats. That is why this makes it more likely that the Trump administration will try, now that Israel has somehow taken away that diplomatic and military support from Washington, they will most likely try to increase military pressure, set deadlines. I think we will see more threats in the rhetoric of American officials, and we will move towards a direction where if the Islamic Republic does not intend to come to the negotiating table anyway, it does not seem likely that Trump will give the Islamic Republic time to negotiate, that he will waste time. If the Islamic Republic does not come to the negotiating table and those concessions sought by the US are not given. It is unlikely that the US and Israel will enter a military phase or before that, they will make credible and serious military threats against the Islamic Republic. Mr. Aghaei, Ali Khamenei spoke again today, but he did not mention negotiations. Instead, he said that our defense is fine, which of course we know could be a response to Donald Trump, who said that it would not be difficult to damage them in terms of defense. How much do you think that with the situation becoming more complicated and the seriousness of Israel and the United States, the Islamic Republic will ultimately reach the deal you are talking about? Come and see me and let me point out that a realistic view shows us that the statements of the Leader of the Islamic Republic regarding the level of military and defense capabilities of the Islamic Republic against serious threats, which I mean by serious threats is probably the same as the possible attack of the United States and Israel, and that the Islamic Republic has absolutely no problems in terms of defense capabilities, according to the Leader of the Islamic Republic. These are primarily misleading, incorrect, contrary to the facts on the ground, and in a way, it has more domestic consumption, and in a way, the Islamic Republic, I think, is more afraid of the factor of decline, meaning that the main source of concern for the Islamic Republic is internal rather than external. They are trying to prevent that collapse factor in some way, and since Trump’s maximum pressure will continue, I think this will cause those trust-denial faults in the main institutions of power among the people in that core, in those layers close to the core, to become more active. In any case, I think that the Islamic Republic, even if it makes a deal, in a short-term game, assuming that it gives big concessions, will be weaker. It will actually lose. And if it makes a deal, well, if it doesn’t make a deal, it will want to enter a confrontation phase, which it will actually lose. And this American action to send and dispatch these B-52 Stratofortress bombers from Britain along with KC- 135 tankers, all of these are signals to the Islamic Republic. Yes, now American and Russian officials are in Saudi Arabia. They want to strengthen deterrence. Trump and Putin may meet in Saudi Arabia in the coming days. They will send these as a deterrent, but at the same time, there is a signal from Washington to the Islamic Republic that America’s determination and will to confront The military attack on the nuclear facilities of the Islamic Republic and other targets they are considering is very, very serious. I am very grateful to you, Hossein, a researcher in international relations and strategic affairs, for being with us in Iran. Contradictory statements about the Dehdasht protest rallies continue, while the Kohgilu police commander has completely denied the occurrence of the rally in Dehdasht. The Fars news agency reported the arrest of the leader of the Dehdasht rally, Kandeh, along with several others, by the IRGC Intelligence Organization. Fars claimed that these people intended to carry out what he said were sabotage operations and were handed over to the judicial authorities. Last week, a group of Dehdasht citizens held a protest rally for several consecutive nights and chanted anti-government slogans. At the same time, reports were published about the security situation and the arrest of a number of citizens in this city. In this regard, Masoud Kazemi, a journalist from Munich, joins us. Mr. Kazemi, what do we know about what happened in Dehdasht and why are the comments so strangely contradictory? How can the leader of the rally be arrested? A news agency affiliated with the IRGC say this after that. The judiciary says that there was no gathering at all. Well, the beginning of the Dehdasht protests was symbolic. That is, on the evening of the 2nd of Bahman, which the next day was the 22nd of Bahman, like in many parts of the country, slogans were chanted that night. But the Dehdasht protests continued after that. According to the information we have, at least until the 4th night after that, a large number of citizens took to the streets and chanted anti-government slogans. But from the beginning, the Islamic Republic’s media approach to the incident was denial. That is, you couldn’t find even a short news story about the Dehdasht protests in the domestic media until yesterday, when the Fars News Agency, affiliated with the Revolutionary Guard Corps, announced, as you said, that a number of those who they said were the leaders and ringleaders of the protests were arrested. At the same time, the provincial police chief denied it outright. Of course, the Fars News Agency news report didn’t say that protests had taken place. It said that some leaders were arrested who wanted to carry out sabotage. But the information we have, the images we have, the video that I think IRA International released yesterday, showed that in a Direct shooting was being carried out against protesting citizens, until now, human rights media and those who work for human rights have published the names of at least 25 people who were arrested in this city by the IRGC Intelligence Organization and the Ministry of Intelligence on the 8th. We know that Dehdasht was also an active city in the protests of the Women’s Uprising of Freedom, and at least two people were killed. Pedram Azarnoosh and Behnam Mehdad were killed in the protests and now the arrests. The news indicates that it was accompanied by violence. There is still a security atmosphere. For example, Motahereh Tahereh Motahernia. I apologize that she was arrested. She was also arrested in the 1401 protests. There is a security atmosphere, but the government’s approach is to deny the incident. Apparently, at least up to now. Journalist Masoud Kazemi. Thank you to Munich. Mr. Kazemi. But another issue is the reactions to Prince Reza Pahlavi’s positions at the convergence meeting. Prince Reza Pahlavi’s comments criticizing the slogan “King Reza Pahlavi” not to insult the opposition and not to raise the issue of monarchy or republic at the current stage. There were opponents and supporters of Prince Reza Pahlavi’s meeting last night. With some of the victims and detainees of the nationwide protests of 1401, including Armita Abbasi, we are also discussing this issue here with Hamed Shivan Irad, the first secretary of the Iran Novin Party from Geneva, and Arash Azizi, a writer and historian who joined us from New York. Welcome, Mr. Azizi. It can be seen right now that more moderate groups are welcoming the talks of Prince Reza Pahlavi. I can point to the reformists with a name and tradition in Iran, who I paid for, who welcomed these talks. How much do you think will put more groups on the path with the prince? His talks yesterday at the Munich meeting? Yes, exactly. You mentioned an important point. I saw the same exact lobby groups that we mentioned. I saw at least one or two people. Look, Mr. Pahlavi’s story is clear. Every time he speaks against the extremists around him, every time he criticizes King Reza Pahlavi’s slogan, for example. He criticized the Resurrection Party of his father’s time and said, ” Don’t go around me, I’ll have to name them.” He meant exactly which shops. Every time he moves like this, more people come around him and more people are attracted. However, the problem and contradiction here is that we don’t see this diversity among his main close associates. His main close associates are people like Mr. Etemadi and Mr. Ghasemi Nejad. It is important to name them because you see, these represent a specific political spectrum, and Mr. Pahlavi’s close associates and team do not have that diversity at all. People like Mr. Shabay Rad, whose speech we are hearing now, do not follow Mr. Pahlavi’s position in any way. Mr. Pahlavi says this, but we do not see that approach of attraction in the approach of his colleagues and his close associates. Therefore, this is a film that, unfortunately, has been released. I have one last point to make, Mr. Pallow, there is another important contradiction. He is in They said, “We shouldn’t create a leader now, but we shouldn’t say King,” and all that. But in this very meeting of the parties, whose list I’ve been trying to get for several hours, I won’t declare him as their leader. He said, ” I am the leader of the transition period,” while no one has recognized him in any way, nor have any parties outside the spectrum of parties. As far as I understand, participating in them is all from a very small spectrum. It even seemed that the Constitutional Party of Iran Liberal Democratic Party did not agree with that clause. Of course, I couldn’t understand this clearly. So there is also the issue that Mr. Pahlavi, I just want to say that Mr. Pahlavi, I welcome this action. I think it was good to move in this direction. However, if they want to do this job completely, they should stop claiming a single leadership, try to be an important national figure, a figure who can be a very acceptable figure, and try to create unity among the opponents of the Islamic Republic and get closer to the opponents of the Islamic Republic and not Presenting that anti-union, extremist, and undemocratic path that he criticized, but most of his close associates still follow, Mr. Shibai Rad, I saw in the words of many that the group that was present at the meeting was clearly a group that had previously supported Prince Reza Pahlavi. There were no other groups in that meeting that now approved under the leadership of Prince Reza Pahlavi. How do you see this in addition to Mr. Azizi’s words? Yes, thank you very much. Mr. Azizi’s words were along with following a line that, unfortunately, I must say that in cyberspace, especially in cyberspace, it is a line that is followed by the unknown forces of the Ministry of Intelligence. Now I will explain what it is for. Look, when those who want to undermine and weaken Prince Reza Pahlavi and know that because of his high popularity and the position he holds, they cannot directly attack and attack him, they try to attack those around him with words that have no evidence and are not true, and that The famous saying that he himself is good and his entourage says, one is that the leader of the Shah is Reza Pahlavi and no one else has claimed to be the leader of the revolution. This is number one and number two, instead of talking about how those around him do not agree with the prince’s statements, they should provide examples of where and when this conversation took place. For example, let me mention myself. I am not talking about others. Right now, you can see in cyberspace that a lot of hate has started against me, starting yesterday. While if you are some of those who apparently support Shah Reza Pahlavi, if what you said was true, then I would support them. Yes, yes, I will support them. This means that what you are saying has no evidence whatsoever. We are talking about Shah Reza Pahlavi, not about the mortar. We are talking about other people, other dear friends who are working hard in Iran and are not talking about them. But another important point that you said is that the other opposition forces, I would still like you to support them. It is very important to name who they are. For example, people like you who choose Mousavi as their leader. It means that it should be clear that those political forces that you are talking about are not other groups. I want to return to your question, dear Niyoshi. What groups did you see in this meeting? It was completely diverse. There were groups that might not agree with the leadership of the prince in such a context. There were groups that might strongly agree. There were groups that even said, let’s go ahead and use another title. Incidentally, that diversity itself showed that group. But if what someone meant is groups that have been defending the Islamic Republic until now, or like Mr. Azizi himself, someone like Mousavi who calls Khomeini the criminal, that awake soul, and whose wish is to return to the golden age of the Imam, they are not talking about fever. Because 57 and all those who continue to defend the 57 discourse, in this, if even we accept it, we as political forces are other people. They do not accept the slogan of reformist and fundamentalist. The whole thing has been in the dialogue since 2017. What can I say? It has entered the hearts of the Iranian people. Anyway, I will summarize so that we can get to other discussions. I think that we should talk with examples, name the groups we are talking about. If we want to talk in general, maybe the mind is divided. Yes, they are right that there were no other groups, but which groups were there? Which spectrum is better to talk about? Dear Mr. More importantly, what is it, dear Mr. Just today, Prince Reza Pahlavi tweeted again and said that they welcome other groups to be present in this space? You mentioned those around him. For example, the same Mr. Etemadi that you mentioned was with him. He was probably the one who consulted him about who he wanted to meet. In any case, he is not his political advisor. But another issue that arises is that those who do not accept the leadership of Prince Reza Pahlavi should choose their own leadership or have their own council. Or why is that coalition without Prince Reza? Pahlavi did not last. How do you see this? I think this criticism is 100% wrong. I invite all those who consider themselves republicans, such as Mr. Hamed Esmailiou, friends of various leftist and republican parties, Mr. Mehdi Fatpour, I can name them. Come together, get organized. The time for you to criticize Mr. Pahlavi but not organize yourself, not organize yourself, in fact, not be able to present an alternative leadership is over. And I completely agree with those who say, “We don’t want a leader because we are not a party.” And they don’t understand politics. Apparently, politics without organization, which organization must have a name, now you can call it a leader, you can call it a spokesperson, you can call it a leadership council, but you have to have something. Where in the world is there a party or movement that says, “We don’t want a leader,” and I don’t know. My leader, in your leadership, this is a very bad thing that should be put aside, but Mr. Sheba, let’s bring evidence and examples to this statement. It’s very good. I’m going to name one by one. First, they talk about Mr. Mirsin Mousavi like this. He is a person who has been under siege and demanding the resignation of the Islamic Republic. You must know that Mr. Mousavi has been calling for the convening of a constituent assembly for two or three years. Well, Mr. Pahlavi should say one thing and two things. Wake up, Khomeini. Let me finish my speech. Mr. Pahlavi should come and say this. Sir, I don’t get along with anyone who supports Mr. Mousavi. But not only did he not say this, Mr. Pahlavi praised Ayatollah Montazeri in his recent speech at the American Jewish Anti-Defamation League. Now let me ask you, Mr. Shahbani Rad, do you also praise Ayatollah Montazeri ? Mr. Pahlavi praised Nasroon Sotoudeh. Mr. Sheibani Rad, do you praise Nasrin Sotoudeh? No, Mr. Pahlavi completely accepted and criticized the tortures of SAVAK during his father’s time and condemned the Rastakhiz Party. Mr. Sheibani Rad, do you approve of the tortures of SAVAK and express your disgust for them and condemn the Rastakhiz Party ? Mr. Pahlavi of the Green Movement spoke with a completely positive approach, both at that time and in the years that followed. Mr. Shabd, do you do this or not? I can say by tomorrow morning that Mr. Pahlavi himself always speaks as a liberal democrat, but those around him, like Mr. Shebin Rad, like Mr. Kiani, like others, are actually in the right position. I will also say one more thing. Just two days ago, I had a debate and actually a conversation with Mr. Kiani in Washington. Mr. Kiani said that while they are from his party, they are from the New Iran Party. He said that he considers the main achievement of the past two or three years to be polarization, and that polarization is between those who are called Iranists, which means They themselves, those around them, and the rest of us, for example, we who are Marxists, specifically the name of H. Of course, Mr. Ezz has another conversation, another story with someone else. I don’t want the discussions to interfere with us trying to answer someone else in this conversation. I am allowed to speak. Kiani, the editor-in-chief of Fereydoun magazine. Mr. Kiani, the editor-in-chief of Nash, is just a face like this. Just say, “Oh, let’s hear Mr. Sham’s words. Let’s listen to Mr. Sham’s speech. Is he against it? Is he against it? Or is he in agreement? Mr. Shabi’s answer. In addition to Mr. Ezair’s answer, we want to address the same differences between the royalists and the pro-prince faction. You yourself mentioned that you have been attacked, and even the prince himself is being criticized. Tell us about that too. Yes, look. I am very happy, very happy, especially for the people who see the scenes where no one can object to Prince Reza Pahlavi himself, the one who is elected as the leader. And I think that the three or four minutes that Mr. People like me, like Alireza Kiani and these people, and we, that we did not claim leadership, yes, no, let me talk, let me talk, we also did not claim leadership, that is, this is very important, and the more important point is that the question is about the future, that is, they ask whether you are or not, they do not say, “You said this somewhere.” This is an important point, so you have no examples so far. You are asking whether you are or not. In any case, I will say, let me talk. If the topic of the program is a carrier of evil, I will answer each and every one of these questions. You think that the program will not answer it, but I will give an example that I want to tell you and all the friends who call the pro-Iranian community the pro-Iranian community, the pro-Iranian movement, that we do not necessarily agree with Shah Zapala in these cases, and this shows the beauty of this movement. Incidentally, we know Prince Dad Pahlavi as the leader of this movement because we know that he is the one who can be that umbrella that covers many groups. When we are a political party, that is, We have a specific political ideology and we are not a partisan like them and their position. When a political party is supposed to be a partisan political party, it is not called a political party. It is a political party with a right-wing liberal ideology that has its name written in its motto. As the first secretary of the party, I can tell you about the New Iran Party why we believe so. But the Mecca is here. The leader of this movement is someone like Princess Reza Pahlavi. He is someone who has a partisan vision and a vision that can challenge other groups. I will just say one final point. Dear Princess Reza Pahlavi, the Renewal Party has also said many times that it fully supports in this regard that anyone, anyone I am talking about, should cross the Islamic Republic and see the entirety of this system as negative and see Bahman 57 as the real thing for Iran. Whoever wants to be, the doors must definitely be open to the nation and the nation must also fight the Islamic Republic. He should also try for the future of Iran, but the name you mentioned, for example Mir Hossein Mesin, I didn’t see him saying, ” Get rid of the Islamic Republic.” Yes, he has passed Seyyed Ali Khamenei, but his life is still alive. Khomeini is an executioner who we all know what he did. There are no exceptions. Yes, anyone who wants to get rid of the Islamic Republic should do so. In the remaining time, there are 10 minutes left. We will consider one minute for each of us to have a summary. Mr. Azizi agrees with some of the words of Shah Reza Pahlavi. He also knows that his role is to get rid of the Islamic Republic and then the situation at the ballot box is clear. Until then, see what your basic problem is. The thing is that you, the set of politicians’ behavior, are always calculating, not just talking. Our problem with Mr. Pahlavi is that I don’t know why he is my leader. Let him not talk. I do not accept Mr. Reza Pahlavi as a leader of the transition period in any way. As an Iranian citizen, I accept him as a political figure. For what reason? I don’t accept it because you see Mr. Shabani Rad saying, “Well, Mr. Pahlavi is a general, but we are a criminal, but we are not.” That’s right, but Mr. Pahlavi is managing this. From among those close to him, he asks for a consultant. There should be at least two people from another faction, but everyone agrees with Mr. Shabani Rad. Then this film has already been broadcast. And Mr. Pahlavi, I will simply tell you this. As an Iranian, you can see that Republican faction, Mr. Pahlavi, all the claims of those from Vahdat and Ittehad are nullified because Mr. Qasem Nejad, who sits next to him, Mr. Etemadi, who sits next to him. Right now, I don’t want to repeat myself, but he is the one who used the word “terrorist” for Iranian journalists abroad. You know, this is political behavior. Mr. Pahlavi cannot play this game, that he himself speaks like the Liberal Democrats, and then he speaks like this, for example, even the supporters of dear Mir Hossein like this. They should clarify their own duties. Mr. Pahlavi says, “What a right-wing sect. My opportunity is very limited. Mr. Sheibani. Why are there no people from other parties with other tendencies in Mr. Pei’s circle of close friends? Those who are close to Prince Pahlavi and are part of his team are not present in any party. They do not do any political activity. Precisely for this reason, Prince Reza Pahlavi and his close friends and the team that works with him are causing a cross-party movement. Mr. Azizi says that other groups, for example, are always interested in saying that they want to be monarchists. Of course, they use the term monarchist, which unfortunately has an offensive connotation in the Iranian political atmosphere. I think that their intention was to insult, but they do not pay attention to the fact that at this very meeting yesterday, a group of Republicans supporting Prince Pahlavi were present. At this very meeting yesterday, there were groups that did not agree that we should include the title of leader, so that those who might not even accept Prince Pahlavi as a leader would not be closed. While I personally strongly oppose this because if I talk about this and finish my speech, when I am not finished, you will see that there is a ship sailing in a stormy sea and we are fighting the monstrous republic of the Islamic Republic that has no mercy. We believe that the helm of this ship should be in the hands of someone and that person is none other than Shah Reza Pahlavi and this is us who I am talking about, including a large majority, perhaps an absolute majority, of Iranian society. You say that no, we are not our leader. Very well, you cannot ask us to let go of the helm, God willing, so that this ship will sail in the storm because you do not accept it or you are the leader and you declare to each other. If we see that in any case, these leaders can form an alliance with each other, have a conversation, talk and guide this ship together, or you sit on the sidelines and try to kick, throw stones, we can bring this ship to shore. We will defeat the Islamic Republic and we will develop and liberate Iran. Thank you both for the detailed discussion. I hope it can be continued at another time. Hamed Sheibani Rad, First Secretary of the Iran Novin Party from Geneva, and Arash Azizi, writer and historian from New York. Thank you both, gentlemen. But in other news, for decades, numerous internal and external crises have become an inseparable part of Lebanon, and of course, the new government of this country, headed by President Joseph O’Neill and Prime Minister Nawab Salam, is no exception to this rule. However, it can be said that the Lebanese government is facing two major external and internal crises. The Israeli issue, which is due to withdraw from southern Lebanon tomorrow, coincident with the end of the 60-day ceasefire with Hezbollah. Earlier, reports had been published that Israel does not intend to evacuate the strategic point in southern Lebanon. Today, the country’s army bombed some Hezbollah positions in eastern Lebanon, just one day after the warning of the Secretary General of Hezbollah. The only responsibility of the Lebanese government at this time is to make its maximum efforts, whether through political pressure and diplomatic communications or other means, to ensure that Israel withdraws on time and then move on. Internally, this crisis also comes back to Hezbollah. The current Lebanese government is trying to reduce Hezbollah’s influence to the lowest possible level. This bold approach began at the same time as Israel shattered Hezbollah’s military capabilities, and perhaps it can be said that it began on the first day of the ceasefire. The first major development in this regard in the Lebanese political arena was the attempt to elect a new president. Joseph Onn was elected as the country’s president after two votes by the Lebanese parliament. The second development was the election of Nawaf Salam as the 53rd prime minister despite Hezbollah’s opposition. But the climax of the story was the formation of the Lebanese cabinet, which this time, unlike previous periods, does not include any Hezbollah members. This unprecedented development was never imagined before. To better understand the story, it is enough to know that Hezbollah and its allies formed a total of 13 ministers in the previous Lebanese cabinet, while in the current government, only the post of minister has been transferred to the Hezbollah United Action Movement. Some decisions of the Lebanese government must be approved by two-thirds of the cabinet members, but the composition of the current cabinet Lebanon is in a situation where Hezbollah will not have the ability to veto important and fundamental decisions, unlike before. Another development has taken place during the 60-day ceasefire period. The formation of the second Trump administration was much faster in opposing Hezbollah, to the point that Morgan Ortagus bluntly declared that Hezbollah’s presence in the government is a US red line. However, it seems that from the current US administration’s perspective, even this reduction in Hezbollah’s weight in Lebanese domestic politics is not enough. Regarding Lebanon, our goal is a strong Lebanese government that can depose Hezbollah. On such a basis, one can understand the root of the recent clashes in Lebanon around Beirut’s Rafik Hariri Airport. The ban on two monthly flights to Lebanon and Hezbollah’s protest against this decision are signs of the group’s increasing predicament. On the other hand, Saudi Arabia’s support for the Lebanese government in dealing with the protesters is another sign of the new balance of power in Lebanon, which will not be good news for the Islamic Republic, the party’s main supporter. Mohammad Javad Akbar, a journalist from Paris, will join us to talk more about this matter. Mr. Akbarin In the midst of these internal and external crises, what kind of Lebanese should we expect after this? Can Hezbollah be left out of the Lebanese political arena for a long time? Good luck. Look, everything depended on the Islamic Republic. These planes that were banned from landing at Beirut International Airport were planes that, according to an announcement that the Secretary General of Hezbollah actually confirmed, the government had been informed that a large amount of money was accompanying these flights. Until now, they have been saying why extend the ban on these flights because of the risk that if money or weapons reach this flow, it will be possible to rebuild it. In the past, the Islamic Republic had access to this flow through land and sea routes in order to deliver weapons and money to them. Now, the land route has been closed. Due to the situation in Syria, the Islamic Republic no longer has the possibility of presence, penetration, or passage through Syria. There were also routes left by sea and by air that are now under strict protection and surveillance when flights are banned or if flights are resumed. This route will also be closed. Therefore, an important event will happen in the next few days. On February 23rd, next Sunday, Hezbollah is going to hold a grand funeral for Nasrallah and Safiadin. They said that even 400 media outlets from around the world are going to be there, and they are going to be hosting guests since two days ago. Well, Hezbollah intends to announce its revival in this program, to announce its resumption. The Islamic Republic’s effort, that is, its role, was to have Israel leave these sensitive points in southern Lebanon tomorrow, which it says are Hezbollah’s points of influence, and then this money was going to be delivered to them so that this grand ceremony could be held immediately after which Hezbollah’s next operations and Hezbollah’s next work could begin. What has happened now is that the Lebanese government closed an air route. Israel said that until my assignment with these five strategic points in the south is determined, I will not leave here. And we still do not have accurate information about whether an agreement and contentment have been reached or not. And third, Hezbollah will not be able to rebuild itself until these obstacles are removed, even though it still insists that The show on February 23rd can be held next Sunday with maximum splendor to see how the next paths will open up. But can you imagine Hezbollah trying to break away from this and continue on its own path without the support of the Islamic Republic? Look, the Lebanese government has done something that practically will not eliminate the Shiite movement. The Shiite movement in Lebanon cannot be eliminated. Millions of Shiites live in Lebanon. Even now, as your detailed report said, Hezbollah does not have a minister in the cabinet, but we have a Shiite in the cabinet who is not a member of the Hezbollah movement. What the new Lebanese government has done is to try to separate the Shiite account from Hezbollah. The quota of the Amal movement is another Lebanese Shiite party, even though it was allied with Hezbollah. Tell them to separate their account so that you can remain, but leave the rest of the Shiites alone. I think we are witnessing the birth of a new Shiite movement in Lebanon, which is neither Hezbollah nor Amal, a Shiite movement that has learned from and no longer wants to be subordinate to a foreign country. At the same time, it wants to blend in with other Lebanese sects so that it can participate in the new era of Lebanon, which is supposed to be an era of development and freedom, and not be excluded. Javad Akbar, this journalist from Paris, came. Thank you. But let’s talk about the US- Russia negotiations on the war in Ukraine, which will be held in Riyadh tomorrow without the presence of Kiev or European countries. US Secretary of State Mark Rubio, along with the National Security Advisor and the US Special Envoy for the Middle East, will meet with Russian representatives. Donald Trump said that both sides consider the war to be over and will probably meet with Putin soon. Today, Zelensky, who traveled to the United Arab Emirates, said that we do not recognize the US-Russia negotiations. At the same time, an emergency meeting of European leaders began in Paris an hour ago. Arash Ali, my colleague from the US Congress, will join us in Washington. Arash, how can you describe the atmosphere? How soon can you say that the end of the Russia-Ukraine war will come? Matt Mossour was a videographer. I had already said on the program that the Trump train is moving very fast, and now the storm that Mr. Jay Dunes unleashed after the Munich Security Conference. The speeches that the Vice President of the United States made in front of the heads of the European Union and many of these people who work in the parliament in Brussels, he addressed them one by one, asked their countries, asked why their countries cannot defend democracy, why each of these countries, Germany, France, named these countries one by one, and why they are now putting more pressure on American voters and taxpayers because they are putting the cost on the shoulders of the United States, and he criticized Germany in particular, and now Germany is heading towards elections during the election period and the political atmosphere is turbulent, while now Mr. Rubio has arrived in Saudi Arabia with Michael Wallace, the national security adviser, and Mr. Steve Whitaker, who is Trump’s representative for Middle East affairs, and now you can see live images of the Elysee Palace, where the leaders of the European Union are meeting behind closed doors and are deciding what their next step should be. The point is, what options does the European Union really have, how does the pyramids want to put pressure now? On America or Russia, in order to have a foothold in the negotiations that are going to take place tomorrow. And if you read the American press, the headlines of most of the press are full of various ambiguities. For example, I’m reading it now from memory. Bloomberg says that Vladimir Zelensky has said that talks without Ukraine are dangerous. Talks between the United States and Russia are very dangerous for Europe. Or the Wall Street Journal says that Mr. Trump is rewriting transatlantic relations, that is, relations between the two sides of the Atlantic Ocean. The main issue is that now Mr. Trump’s advisers and ministers are going to meet with the Russians. Kremlin spokesman Dmitry Peskov has also confirmed that representatives from the Russian Federation are going to be present. This will be the first stage, so that the two sides can sit down and work out their differences. Mr. Keith Kluge, who is Trump’s special envoy for Ukraine, told Zelensky that the last time that efforts for peace did not work out, Mr. Keith Kluge told Zelensky that the reason was that there were too many parties involved. There were so many parties at the table. The issue has become confused, and now Mr. Keith Klatt has said that it is in Ukraine’s interest, in your interest, and in Europe’s interest, to sit this part out for now, let the US and Russia have the initial talks, and then get into the details and maybe be able to have an impact on the negotiations between the US and Russia. My colleague, thank you from the US Congress, Arash. Today we reach the end of the first headline, Monday, February 29, at this moment, until tomorrow at the same level, right here.

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog

  • Visual FoxPro FoxTalk 2001

    Visual FoxPro FoxTalk 2001

    Language Enhancements in VFP 7, Part 1 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    Visual FoxPro 6 Language Reference Book on Archive.Org

    Language Enhancements in VFP 7, Part 1

    Doug Hennig

    Want an early peek at what’s new in VFP 7? This is the first article in a series where Doug Hennig discusses the language enhancements Microsoft is implementing and how to take advantage of some of them now.

    In my article in the December 2000 issue of FoxTalk (“Reusable Tools: Have Your Cake and Eat it, Too”), I discussed “version envy”: wanting to use features planned in an upcoming version of a product in the current version. In that article, I discussed several new functions in VFP 7 and showed PRGs that can provide their functionality in VFP 6. After reading this article, FoxTalk editor Whil Hentzen thought it would be a great idea to extend this to covering all of the new commands and functions in VFP 7, both to familiarize you with them and to enable you, where possible, to use them in VFP 6.

    So, we’ll start the new year off with this idea and spend several months looking at language enhancements in VFP 7. We won’t look at everything that’s new in VFP 7 (such as IntelliSense, editor improvements, DBC events, and so forth); it would take a whole book to cover such a broad topic. Instead, we’ll focus on functions and commands with three things in mind:

    • We’ll briefly consider the purpose of each command and function without getting too bogged down in details (for example, I won’t discuss parameters or return values in detail; you can get that from the VFP 7 Help).
    • We’ll look at practical uses for the commands and functions.
    • Where possible, we’ll explore ways to get the functionality now in VFP 6.

    Keep in mind that, as of this writing, VFP 7 isn’t even in beta yet (it’s considered a Tech Preview version), and these articles are based on the version distributed at DevCon in September 2000. So, commands and functions might be added, removed, or altered.

    Let’s start off with improvements to existing commands and functions, going through them in alphabetical order. Once we’re finished with these, we’ll move on to new commands and functions.

    ALINES()

    ALINES() has been a favorite function of mine since it was introduced. It parses a string (which may be in a variable or memo field) into lines terminated with a carriage return (CR), linefeed (LF), or carriage return-linefeed combination (CRLF) and puts each line into its own element in an array. ALINES() can now accept one or more parse characters, so the “lines” can be delimited with something other than CR and LF. For example, a comma-delimited field list can easily be converted to an array. Why would you want to do this? Because it’s easier to process an array than a comma-delimited string. Here’s a brute-force way of processing the items in such a string:

      
    

    This is ugly code to both read and write. Here’s a more elegant approach that converts commas to CR, then uses ALINES():

      
    

    In VFP 7, the first two lines in this code can be reduced to the following:

      
    

    AMEMBERS()

    This is one of those functions you likely don’t use very often, but it’s very useful at those times when you need it. AMEMBERS() fills an array with the properties, events, and methods (PEMs) of an object or class. There are two changes to AMEMBERS() in VFP 7: You can now get the PEMs of a COM object, and you can specify a filter for the PEMs.

    Passing 3 for the third parameter indicates that the second parameter is a COM object. Here’s an example that puts the PEMs for Excel into laPEMs:

      
    

    A new fourth parameter allows you to filter the list of PEMs so the array contains only a desired subset. For example, you might want only protected, hidden, or public PEMs, native or user-defined PEMs, changed PEMs, and so forth. This is handy, because prior to VFP 7, the only way to filter a list of PEMs was to use PEMSTATUS() on each one. For example, I use the following routine, CopyProperties, in VFP 6 to copy the properties of one object to another instance of the same class. Why would you want to do that? Imagine a form that you pass an object to and have the user modify the properties of the object in the form’s controls. What if the user wants to press a Cancel button to undo his or her changes? I decided to copy the object’s properties to another object of the same class, and then have the form work on the new object and, if the user chooses OK, copy the properties of the edited object to the original object. If the user chooses Cancel instead, the original object isn’t touched. So, the form creates another instance of the passed object’s class and then calls CopyProperties to copy the properties of the original object to the new instance. Here’s the code for CopyProperties (you’ll also find it in COPYPROPERTIES6.PRG in the accompanying Download file):

      
    

    The VFP 7 version is a bit simpler. First, it uses the new “G” flag so the array only contains the public properties of the source object—we don’t have to use PEMSTATUS() to later ignore protected or hidden properties. Next, although there’s currently a bug that prevents it from working with array properties, we’ll be able to use the “C” flag so the array only contains properties that have changed from their default values; when this bug is fixed (notice that I’m being optimistic and didn’t say “if” <g>), we’ll be able to remove the PEMSTATUS() check for changed properties. Finally, I’ve submitted an enhancement request (ER) to Microsoft to provide a flag for read-write properties. If this ER is implemented, we’ll be able to remove the PEMSTATUS() check for read-only properties. Thus, the VFP 7 version will be simpler and faster than its VFP 6 counterpart. Here’s the code for COPYPROPERTIES7.PRG (I removed a few comments that duplicate those in the VFP 6 version in order to conserve space):

      
    

    By the way, if you examine COPYPROPERTIES7.PRG, you’ll see that the header comments include my e-mail address and Web site, and that they appear blue and underlined, just like a hyperlink in your browser. Clicking on either of these gives the expected action (a Send Message dialog box with my e-mail address already filled in or my Web site in your browser). This editor enhancement makes it simple to direct other developers to your Web site for support, more information or documentation, updates, and so on.

    TESTCOPYPROPERTIES.PRG shows how CopyProperties can be used. Change the statement calling CopyProperties6 to CopyProperties7 to see how the VFP 7 version works.

    Here’s another use of AMEMBERS() that’s somewhat similar. PERSIST.PRG provides a way to persist the properties of an object so they can be restored at another time (for example, the next time the user runs the application). It creates a string that can be stored, for example, in a memo field in a table. This string contains code that can be used to restore the properties of an object. For example, the string might look like this:

      
    

    After retrieving this string from wherever it’s stored, you’d then do something like this to restore the saved properties (in this example, lcPersist contains the string):

      
    

    This example uses the new VFP 7 EXECSCRIPT() function, which I discussed last month.

    I won’t show the code for PERSIST.PRG here, both because of space limitations and because it’s quite similar to COPYPROPERTIES7.PRG. To see this routine in action, run TESTPERSIST.PRG.

    ASCAN()

    Two things I’ve wished for a long time that Microsoft would add to ASCAN() are the ability to specify which column to search in and to optionally return the row rather than the element (to avoid having to subsequently call ASUBSCRIPT() to get the row). My wish was granted in VFP 7, plus ASCAN() gains the ability to be exact or case-insensitive. The new fifth parameter specifies the column to search in, and the new sixth parameter is a “flags” setting that determines whether the return value is the element or the row and whether the search is exact or case-insensitive.

    Because I always want the row and never want the element number, normally want a case-insensitive but exact search, and have a difficult time remembering exactly which values to use for the flags (no wisecracks from younger readers <g>), I created ArrayScan, which accepts an array, the value to search for, the column number to search in (the default is column 1), and logical parameters to override the exact and case-insensitive settings. Here’s the code in ARRAYSCAN7.PRG (I omitted header comments and ASSERT statements for brevity):

      
    

    In VFP 6, we can do something similar, but since we don’t have the new capabilities of ASCAN(), we have to use a different approach: We’ll use ASCAN() to find the value anywhere in the array, then determine whether it’s in the correct column. If not, we’ll change the starting element number and try again. ARRAYSCAN6.PRG has almost the same functionality as ARRAYSCAN7.PRG (although it’s slower and has more complex code), except support for case-insensitivity—to implement that feature, you’d have to do it via the brute-force method of going through each row in the array and looking for a case-insensitive match in the desired column. Here’s the code for ARRAYSCAN6.PRG:

      
    

    TESTARRAYSCAN.PRG demonstrates how both ARRAYSCAN6.PRG and ARRAYSCAN7.PRG work.

    ASORT()

    VFP 7 adds one new feature to ASORT(): a case-insensitivity flag (in VFP 6, ASORT() is always case-sensitive).

    BITOR(), BITXOR(), and BITAND()

    These functions can now accept more than the two parameters they do in VFP 6; they’ll accept up to 26 parameters in VFP 7. This is useful in cases (such as some API functions and COM objects) where several flags have to be ORed together; in VFP 6, you have to use something like BITOR(BITOR(BITOR(expr1, expr2), expr3), expr4) to do this.

    BROWSE

    At long last, we get a NOCAPTION option for BROWSE that displays the actual field names rather than the captions defined for the fields in the database container. You can get this behavior in VFP 6 by running BROWSEIT.PRG instead of using BROWSE. This relies on the fact that a browse window is really a grid, so we can change the caption of each column to the actual field name. Here’s the code for BROWSEIT.PRG:

      
    

    COMPILE

    In VFP 7, the COMPILE commands (COMPILE, COMPILE CLASSLIB, COMPILE REPORT, and so forth) respect the setting of SET NOTIFY. With SET NOTIFY OFF, no “compiling” dialog box is displayed. This is important for two reasons: In-process COM servers

    can’t display any user interface, and you likely don’t want your users to see such a dialog box. In VFP 6, we can suppress the dialog box by using the Windows API LockWindowUpdate function, which prevents updates to a window similar to VFP’s LockScreen property (although this won’t help in-process COM servers, since the dialog is still being called). The Download file includes LOCKWINDOW.PRG, which accepts .T. to prevent window updates and .F. to restore window updates. Here’s the code for this PRG:

      
    

    To prevent the “compiling” dialog box from being displayed, use code similar to the following:

      
    

    Conclusion

    Next month, we’ll carry on examining improved commands and functions in VFP 7. When we’re finished with them, we’ll move on to new commands and functions.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the January 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    Driving the Data Bus: Chatting on Company Time–Building a VFP Chat Module 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    Driving the Data Bus: Chatting on Company Time—Building a VFP Chat Module

    Andrew Coates

    Passing data to and from applications over the network makes the synchronization of data simple. In this article, Andrew Coates uses a messaging hub server to develop a chat component that can carry more than just typed conversations between application users.

    The chat system allows users across the network to exchange data in real time. Most commonly, this data consists of typed conversations, but the power of the system lies in its ability to pass other data as well. This could be in the form of audio or video or, as will be presented here, other text data that will allow the two chatting parties to retrieve the same database record by sending a primary key or keys from one to the other.

    The chat system

    To allow chatting, each client registers itself with a chat server as it starts up. The chat server maintains a list of connected clients and can detect disconnections automatically. If a client goes offline either by choosing to disconnect or due to network or some other failure, the server removes that client from the list. A schematic representation of the setup is shown in Figure 1.

    Each client consists of a chat handler, which sends and receives the messages, and zero or more chat forms. A chat conversation is carried out between chat forms, which are created specifically for that conversation and destroyed at the conclusion of the conversation. A client may be involved in many chats simultaneously, so to ensure that messages are routed to the correct form, the chat handler employs a concept of “chat slots” or a collection of instances of the chat form so they can handle multiple chats simultaneously and not get crossed lines. A schematic of the clients, the chat handlers, and the chat forms is shown in Figure 2.

    In Figure 2, there are two conversations being conducted. Client 1 is talking to client 2 and client 3. Because client 3 addresses its messages to client 1, chat slot 2, they never get mixed up with messages from client 2, which are addressed to client 1, chat slot 1.

    Initiating a chat

    To establish a conversation between two clients, one of the clients needs to initiate the chat. The initiating client sends a request to the intended recipient, and the recipient either accepts or declines the invitation to chat.

    The process from the chat initiator’s point of view is shown in Figure 3.

    When a client decides to start a chat, it creates a chat form and assigns the form a slot number. Next, it sends a request to the recipient that includes the sender’s ID and slot index. It waits for a response from the recipient, and if it gets the response, it shows the form and the chat begins. If it doesn’t get a response, it destroys the form and tells the user that the request timed out.

    Responding to a request for a chat

    The process from the chat recipient’s point of view is shown in Figure 4.

    When the recipient receives a request to chat, it decides to either accept or decline the request. If it declines to chat, it simply sends a message back to the requester declining the invitation. If it decides to accept the invitation, it creates an instance of the chat form and assigns it to a chat slot of its own. As long as it creates the form successfully, it sends a message to the requester accepting the chat and informing it of the recipient’s chat slot index. It then displays the form, and the chatting begins.

    Chatting

    To chat, the two clients send messages to each other addressed using the client ID and the chat slot index. When a client receives a message, it passes it to the form in the applicable chat slot, and the form displays the message.

    Ending the chat

    When a chat form is closed, it removes itself from the chat slot collection and sends a message to the other client that it’s being closed. When a form receives a message that the other party has closed the form, it remains open so any further action can be taken by the client, such as logging the conversation to a table or other file, but it won’t allow the form to send any more messages.

    InterCom System

    The InterCom System server (available from www.cns.nl/) is a messaging hub—that is, an application that sits somewhere on the network where all users can access it and allows applications to connect to it, register interest in certain events (subscribe), trigger events for other users, send messages to specific users, and disconnect from the hub. It sits somewhere on an IP network (note that the system is restricted to running over an IP network), and any client on the network—which could include the entire Internet—can connect to the server. Any connected client can then send a message to any other connected client. Clients can also trigger an “event,” which is broadcast to all of the other connected clients that have subscribed to that event. The triggered event can have data associated with it. Therefore, clients can communicate:

    • with all other interested clients (by triggering an event to which other interested parties have subscribed);
    • with a specific client (by sending a message to a specific client ID); or
    • with the server to get information about the other clients connected to the system.

    The client is in the form of an ActiveX control and can therefore be placed on a VFP form and its methods, properties, and events accessed as for any other such control. The InterCom System provides a client with three types of functionality—Notification, Messaging, and Inventory. The InterCom System is discussed in more detail in my article “Pushing the Point” in the August 1999 issue of FoxTalk.

    At the time of this writing, the InterCom System costs $399 USD for a royalty-free, single-developer license. There’s also an evaluation version of the system available for free download. The evaluation system is limited to a maximum of three simultaneous connections, but it’s otherwise identical to the full version.

    Wrapping the client

    The InterCom client has one feature that makes it awkward to use in VFP. It employs arrays passed by reference to return lists of information. VFP doesn’t handle this data type well (the COMARRAY() function only appears to work with COM servers created via a CREATEOBJECT call, not with ActiveX controls). To overcome this limitation, a wrapper for the ActiveX control was developed in VB. The wrapper intercepts the method calls and translates the array into a delimited string, which VFP handles very well. The wrapper class is included in the accompanying Download file.

    The chat handler

    The core of the chat component on each client is the chat handler. This object is instantiated when the application starts up and provides the communications link to the InterCom server. It’s based on the Form base class, so it can provide a container for the ActiveX InterCom client control. The load method of the class simply checks that the wrapped InterCom client is installed on the system. The init method accepts a reference to the calling object (for callbacks) and the name or IP address of the InterCom server machine. It then attempts to connect to the server and returns a logical indicating success.

    To initiate a chat, the application calls the chat handler’s StartChat() method, passing the descriptor of the client with whom the chat is requested. The sequence of events shown in Figure 3 then begins. The code for the StartChat() method is shown in Listing 1.

    Listing 1. The chat handler’s StartChat() method.

      
    

    In the example shown here, there’s the facility to pass two additional pieces of information with the chat request—a Company ID and a Contact ID. In this application, these are primary keys to two main tables. Passing these keys to the other client allows that client to retrieve the data about which the initiator wishes to chat, perhaps even displaying information from the relevant rows in the table as part of the chat dialog box.

    After checking the validity of these key parameters, the method requests a list of clients matching the descriptor from the InterCom server. The request is rejected if no clients match. If there’s a matching client, the method obtains a chat slot and populates it with an instance of the chat form. The chat form sends a message to the remote client’s chat handler requesting the chat and sets a timer that will fire if the operation times out. It’s then up to the other client to respond within the timeout period.

    The chat handler form class contains only one (significant) control—the InterCom client control. That control has only one overridden event—the one that processes incoming messages, which is called, originally enough, the OnMessage() event. The event code simply directs the message to the appropriate chat handler method. The OnMessage() event code is shown in Listing 2.

    Listing 2. The chat handler’s InterCom client OnMessage() event code.

      
    

    The important point to note from the OnMessage() event code is that the type of message being sent is stored in the message subject. All the OnMessage() handler does is work out what kind of message is being sent by reading the subject and then route the message to the appropriate message-handling method of the chat handler object.

    The chat handler object has four main message-handling methods:

    • HandleRequest()—Handles an invitation to chat from a remote client.
    • HandleAccept()—Handles the acceptance of an invitation to chat.
    • HandleMessage()—Handles a standard message (usually a line of typed conversation).
    • HandleDisconnect()—Handles the message sent by the other party when they terminate the chat session.

    HandleRequest()

    The HandleRequest() method is fired on the remote client when an invitation to chat is received. The method initiates the sequence shown in Figure 4. The code for the HandleRequest() method is shown in Listing 3.

    Listing 3. The chat handler’s HandleRequest() method.

      
    

    The HandleRequest() method starts by reading the message and breaking it down into its component parts. Each part is sent in the message’s data property on a separate line. The handler prompts the user, inviting them to accept the chat, and if the user rejects the invitation, it simply sends a message back to the initiator rejecting the request. If the request is accepted, the chat handler finds the next available free chat slot (or creates a new slot if there isn’t one free already). It then populates that slot with a new instance of the chat form. If it’s instantiated successfully, the chat form handles the notification of the acceptance of the chat. If it’s not instantiated successfully, the chat handler sends a message notifying the initiator that the chat was accepted, but that technical difficulties prevented it from occurring.

    HandleAccept()

    The HandleAccept() method is fired on the initiating chat client when it receives acceptance of an invitation to chat from the remote client. The code for the HandleAccept() method is shown in Listing 4.

    Listing 4. The chat handler’s HandleAccept() method.

      
    

    The HandleAccept() method begins by reading the constituent parts of the message from the data parameter. It then checks to see whether the chat was accepted or rejected, either because the remote user declined or technical difficulties prevented the chat from occurring. If it was accepted, the remote chat slot is assigned to a property of the appropriate chat form, the timeout timer is disabled, and the chat form is displayed—everyone is ready to chat! If it’s rejected, a message is displayed to that effect, and the chat form is released and the chat slot cleared.

    HandleMessage()

    The HandleMessage() method is fired on receipt of a standard message—the type of message that’s passed back and forth between clients during the course of a chat. The code for the HandleMessage() method is shown in Listing 5.

    Listing 5. The chat handler’s HandleMessage() method.

      
    

    The HandleMessage() method simply breaks out the chat slot (so it knows where to send the message) and sends the text of the message to the appropriate chat form for handling.

    HandleDisconnect()

    The HandleDisconnect() method is fired when the chat handler receives notice that the remote client has disconnected from the chat. The code for the HandleDisconnect() method is shown in Listing 6.

    Listing 6. The chat handler’s HandleDisconnect() method.

      
    

    The HandleDisconnect() method simply breaks out the chat slot (so it knows where to send the message) and fires the HandleDisconnect() of the appropriate chat form.

    The chat form

    The other half of the chat client component is the chat form itself. This is the visible manifestation of the chat component where the user types messages and reads the messages typed by the other user. The chat form in our sample chat app is shown in Figure 5.

    The chat form handles much of the communication once the chat handler has established the conversation. To do this, it uses the following key methods:

    • Init()—Responsible for notifying the remote client of some pertinent details and for actually displaying the form.
    • HandleDisconnect()—Responsible for handling the notification that the remote client has ended the chat session.
    • ReceiveMessage()—Responsible for displaying the text of a message received from the remote client.
    • SendDisconnect()—Responsible for notifying the remote client that the local client is terminating the chat session.
    • SendMessage()—Responsible for sending a line of text to the remote client.

    Init()

    The Init() method has two different behaviors, depending on whether the chat form is being instantiated as a chat initiator or a chat receiver. In the end, the functionality of each type of chat form is identical, but the process of creating the form differs depending on its role. The code for the Init() method is shown in Listing 7.

    Listing 7. The chat form’s Init() method.

      
    

    The Init() method accepts quite a list of parameters. The first is the mode in which this form is being instantiated. The allowable values are CHAT_RECEIVER or CHAT_CALLER (defined in chat.h). This information is used to determine the behavior of the object later in the Init() process. The next parameter refers to the local chat handler’s chat slot to which this chat form has been assigned. Next, a reference to the chat handler object is passed so the chat form can access its properties and methods. The next two parameters are additional data used in this sample application to pass the primary keys of two sample tables.

    The keys can be used by the form to display the data applicable to the chat. The descriptor for the remote client is the next thing to be passed. This will be displayed in the form’s caption so the user can tell who this chat session is with. Finally, if the chat slot for this chat on the remote client is known, this is passed as the last parameter. If this is the chat receiver, the remote chat slot will be known, but if this is the chat initiator, the remote chat slot will be passed back as part of the chat acceptance message.

    The parameters are assigned to properties of the form for later use, and the caption is set. Next, an application-specific method, SetButtonState(), is called. In this case, this method is designed to allow the retrieval of the linked data if primary keys have been passed to the form.

    Now the code forks. If the form is a chat recipient, it sends a message back to the chat initiator, accepting the chat and telling the initiator the chat slot ID that’s been assigned for use on the chat receiver, and makes the form visible. If the form is a chat initiator, it sends a message to the chat receiver requesting the chat and sets a timer so the chat requester doesn’t wait forever for a response.

    HandleDisconnect()

    The HandleDisconnect() method informs the user that the remote user has disconnected and sets a local property of the chat form to indicate that the chat is no longer live. It doesn’t close the form, as the local user might wish to review the contents of the chat before closing the form. The code for the HandleDisconnect() method is shown in Listing 8.

    Listing 8. The chat form’s HandleDisconnect() method.

      
    

    ReceiveMessage()

    The ReceiveMessage() method adds a line of text to the list box chat log. The code for the ReceiveMessage() method is shown in Listing 9.

    Listing 9. The chat form’s ReceiveMessage() method.

      
    

    SendDisconnect()

    The SendDisconnect() method sends a line of text from the local client to the remote client. It also displays the line in the list box chat log for later reference. The code for the SendDisconnect() method is shown in Listing 10.

    Listing 10. The chat form’s SendDisconnect() method.

      
    

    The SendDisconnect() method builds a message string that simply consists of the chat slot ID on the remote client. It then calls the SendMessage() method of the chat handler’s InterCom client control. The message is addressed to the remote client’s client ID; it has a subject of CHAT_DISCONNECT (defined in chat.h), and the text of the message consists of the remote chat slot ID.

    SendMessage()

    The SendMessage() method sends a line of text from the local client to the remote client. It also displays the line in the list box chat log for later reference. The code for the SendMessage() method is shown in Listing 11.

    Listing 11. The chat form’s SendMessage() method.

      
    

    The SendMessage() method builds a message string that consists of the chat slot ID on the remote client and the text of the message. It then calls the SendMessage() method of the chat handler’s InterCom client control. The message is addressed to the remote client’s client ID; it has a subject of CHAT_MESSAGE (defined in chat.h), and the text of the message consists of the remote chat slot ID and the line of text to be displayed. Finally, the line of text is added to the chat log list box on the local chat form.

    Sample code

    To demonstrate the use of the chat component, you’ll need the following:

    • The InterCom System server installed somewhere on a TCP/IP network. For the purposes of this exercise, it’s assumed that the server is installed at IP address 192.168.0.1.
    • The InterCom System client installed on all machines that are going to act as chat clients.
    • The InterCom client wrapper (available in the Download file) installed and registered on all machines that are going to act as clients.
    • An instance of VFP for each chat client (either running on the same machine or on separate machines). Note that the evaluation version of the InterCom server only allows three concurrent connections. The full version has no such limitations.
    • The class library CHAT.VCX (available in the Download file) extracted to a commonly accessible location. For the purposes of this exercise, it’s assumed that the path to the class library is \SERVERUTILSVFPCHAT.

    Once these steps are complete, issue the following commands from the VFP command window for each instance of VFP. Substitute a unique number for n.

      
    

    Next, on one of the clients, enter the following command, where n is the number of another client:

      
    

    The second client should pop up a message box asking whether to accept the chat, and, if the chat is accepted, a chat form should be displayed on both the caller and receiver. Messages typed on one client should appear on the other (after the Enter key is pressed).

    Conclusion

    Being able to communicate with other users of an application in real time and with the facility to link the conversation with data from the application adds another powerful resource to the programmer’s toolbox. The techniques presented in this article combine a commercially available solution to inter-application communication with VFP’s data-handling and UI.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the February 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    ClassNavigator 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    ClassNavigator

    Jim Booth

    Multi-tier system designs often require that we use base classes that can’t be defined visually. This means using PRGs to define our classes. The Class Browser built into VFP is a wonderful tool for navigating the hierarchy of class definitions. However, when we use programmatically defined classes, the value of the Class Browser is lost. This month, Jim Booth introduces Michael G. Emmons of Flash Creative Management (now GoAmerica), who has a solution for us.

    Most of the classes we create in Visual FoxPro can be built using the visual class designer. For these visual classes, we have the Class Browser tool. However, there are a number of classes in Visual FoxPro that can’t be created in the visual designer. Classes like the column, page, session, and others must be created in program code using the DEFINE CLASS construct. For these classes the Class Browser fails, but the Class Navigator from Michael Emmons succeeds.

    Simple installation

    One thing that I dislike is a developer tool that takes a genius to install it and get it working. Michael has given us a utility that installs as simply as is possible. Just copy the APP file, ClassNavigator.app, to any directory on your machine, and it’s installed and ready to go.

    The test run

    To test this tool, I created two program files, as demonstrated in the following code:

      
    

    Notice that the class defined in TestClass2 is a subclass of the one defined in TestClass.

    Running ClassNavigator

    Next, I ran ClassNavigator.app and was greeted by the screen shown in Figure 1.

    There are four tabs—labeled Classes, Files, Options, and About—that are used in viewing the classes. The first tab we’ll visit is the Files tab, and we’ll select the Add button. In the file selection dialog box, I chose TestClass.prg; the resulting display is shown in Figure 2.

    Switching to the Classes tab and expanding the tree gives the display shown in Figure 3.

    The display has been expanded to show the existing details. You can see the filename and base class under Info, the Customer property under Properties, and the Custom method under Methods, just like the Class Browser would show us for a visual class definition.

    Double-clicking on the class name in this display will open the editor with the program loaded for editing.

    Hierarchies from multiple programs

    Now return to the Files tab and open the TestClass2.prg file. The new Classes display is shown in Figure 4.

    The Classes tab now shows us the hierarchy of these two classes, including the file information regarding each class.

    Where to get ClassNavigator

    This tool is included in the accompanying Download file. It’s also available at www.comcodebook.com, where future updates will be posted first (as well as the COM Codebook application framework). The source code for the Class Navigator is included in the download. The tool is freeware; you’re free to use or modify it to your desire, but you’re restricted from selling it to anyone else.

    Summary

    Michael G. Emmons has given us a utility that allows us to view classes that are defined in programs rather than visual class libraries. With his tool, we can see the inheritance hierarchy of these classes even when they cross multiple program files. A simple double-click opens any one of the classes for editing.

    Michael and Flash Creative Management (now GoAmerica) have graciously made this tool, as well as many other tools including a complete application framework, available to us all at no charge.

    The Component Gallery: VFP’s Best Kept Secret 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    The Component Gallery: VFP’s Best Kept Secret

    Markus Egger

    Visual FoxPro 6.0 shipped with a great new tool called the “Component Gallery.” This tool is mainly thought to be a productivity-enhancing tool that makes the use of components, classes, and other items found in Visual FoxPro much easier. Unfortunately, so far, very few third-party vendors and development teams have utilized the Component Gallery to the extent one would expect, making this great new addition to VFP one of VFP’s best kept secrets. In this article, Markus Egger not only demonstrates how the Component Gallery can be used, but also how you can create your own catalogs.

    When you start the Component Gallery from the Tools menu, it starts up with several default catalogs already loaded. Catalogs are simply collections of items stored in hierarchical fashion. You can think of each item stored in the Component Gallery as a shortcut to a Visual FoxPro item such as a class, a form, or a report. You might wonder what makes this tool valuable since we already have access to these items through the Class Browser as well as the Project Manager. That’s correct; however, there’s a significant difference: The Class Browser as well as the Project Manager are built as tools for the developer who needs access to every single item in the project. They show all classes, support classes, include files, bitmaps, and much more. The Component Gallery, on the other hand, simply provides access to the top-level items such as classes or components, but hides the complexity under the hood. You can compare this to a car mechanic who needs access to every part of the car, including the engine, transition, and car alarm, while the driver who simply uses the car to get to work every day doesn’t worry about all of those things.

    If you’re the “application mechanic,” you’ll be better off using the Class Browser or the Project Manager. It will provide access to every little bit of the application. This is especially true if you wrote the entire application by yourself. However, if you’re using third-party tools or even components written by your fellow co-workers, you might not need this level of granularity. In fact, it will make it much harder to use those components. Imagine that a team member provides you with a class library that you can utilize for a specific task. This library contains a number of classes, one of which is useful to you. All of the other classes are really just helper classes that the main class depends on, such as parent classes, members of the class, or other classes that are utilized by the main class to do its job. In addition, you get a number of external files such as include (.H) files, bitmaps, and XML definition files that are also required to make this component work.

    Do you really care about all of this information? Of course not! Or, well… you shouldn’t. Why would you want to become the mechanic of somebody else’s “car”? However, in reality, you’ll have to familiarize yourself with all of those components to make sure you add them all to your project and to pick the right class in the first place. Little do you know at this point that your co-worker tried to make this class as easy to use as possible and even provided a builder that can be used to configure this class.

    The Component Gallery will help you in this scenario. Your colleague can create a simple catalog that provides a link to the main class. When you drag and drop that link on your form, not only will the class get added, but, at the same time, all external references are taken care of, and immediately the provided builder starts to make it easy for you to configure the required properties rather than finding out manually which properties have to be set.

    You say this isn’t a problem for you, because you don’t work in a team, or perhaps the team is so small you can simply ask the co-worker? Well, what about third-party products? At EPS, we produce a product line called the FEC (Fox Extension Classes). This is simply a set of classes stored in class libraries, plus a few external dependencies, just as described in the preceding scenario. We gave a lot of thought to the product architecture, resulting in a very flexible environment that farms most of the functionality out to special behavior objects that can be configured and extended at will. The downside of this architecture is that 80 percent of the classes shipped in the libraries aren’t made to be used directly, but are designed for internal use only. How would you like to navigate all of the information through the Class Browser? So there!

    Another great advantage of the Component Gallery is its hierarchical representation of the information. It allows organizing items into folders. This is surely much easier to use than the inheritance-view provided by the Class Browser, or the flat-view provided by the Project Manager.

    So let’s have a look at the Gallery. When you start it the first time, it shows several default catalogs that provide access to the FFC (Fox Foundation Classes) as well as VFP’s samples (see Figure 1).

    Most of the items referenced in the default catalogs are FFC classes. Note that the Gallery can maintain a large number of different items, such as forms, reports, wizards, files, utilities, ActiveX controls, and much more. Basically, any Visual FoxPro as well as Windows item can be referenced through the Gallery. In addition to static links to items, the Gallery also supports a feature called “Dynamic Folder.” Figure 1 shows a reference to such a folder. It’s named “Installed Controls.” This folder automatically shows a list of all COM components and ActiveX controls installed on your system.

    To use a specific class such as the FFC VCR Buttons class, simply select the item and drag and drop it to your form or class that’s open in the designer (note that the Gallery can also be used for source code editing). It will automatically add an instance of the class to your form. You don’t have to worry about what library it’s stored in, nor are you bothered with all of the other classes stored in the same library. The Gallery abstracted all of that complexity away and provides simple, categorized access to this component. Note also that the Gallery displays a description of the component you selected.

    You want to know how much easier this is than using the Class Browser? Well, just right-click on the item and select “View in Browser.” This automatically opens the library in which the class is stored and switches the Component Gallery into Class Browser mode (the Gallery and the Browser internally are really the same application). The result is shown in Figure 2.

    As you can see, this view is much more cryptic. Not only do you see all kinds of classes you have no interest in (how about those custom classes—what’s your guess, can they be used by themselves or not?), but you also see class names that are much harder to understand, and the Class Browser doesn’t even provide a description.

    Another good example is the list of samples that ship with VFP. Perhaps you’re not aware of this, but the FoxPro team has produced a large number of examples that explain many aspects of the Visual FoxPro environment and language. In previous versions, this information was hard to find. Samples are scattered over all kinds of directories, and who wants to run all of them just to figure out what they’re doing? The Component Gallery ships with a special catalog that lists all of the included samples and provides access to them in ways that make sense for each individual example (see Figure 3).

    As I mentioned earlier, the Component Gallery can also be used to automatically trigger builders whenever a complex class is dropped in a designer. Try dropping the “Field Mover” class from the Data Navigation folder in the main Visual FoxPro catalog. Immediately, the builder shown in Figure 4 starts up and asks you to provide important property values. You can drop the same class from the Class Browser or the Form Controls toolbar, but then you’d have to go through an almost endless list of properties and try to figure out what they’re for, whether or not they’re important, and what the appropriate settings are.

    Creating your own catalogs

    So, by now are you convinced of the usefulness of this tool and eager to provide your own catalogs for your libraries, or perhaps even commercial third-party products? Well, you’ve come to the right place.

    Creating a new catalog is easy. Simply click the option button and select the Catalogs page in the options dialog box (see Figure 5). Click the New… button and specify the name of the catalog file (which is a regular DBF file). Initially, the new catalog is listed by its filename. We’ll define a friendlier name a little later. Click the OK button to close the dialog box and open the new catalog right away.

    To rename the catalog, right-click the item and choose Properties (the Rename feature doesn’t appear to work). This launches the dialog box shown in Figure 6. Note that you might not see all of the same options shown in Figure 6. If this is the case, open the Options dialog box and check the “Advanced Editing Enabled” feature on the first page. You can use the Properties dialog box not only to change the name, but also to set descriptions as well as icons that are to be displayed by the Gallery.

    To make the new catalog useful, you’ll have to add some items. First of all, add a new folder that provides links to the classes you’d like to keep track of. You can create new items, including folders, by right-clicking in the right-hand pane (see Figure 7). Again, you have to open the Properties dialog box to rename the folder and set other properties such as the icon.

    You can now proceed to add items to that new folder, in the same way you created the folder itself: Right-click in the right-hand pane and choose to add a new Class. The Gallery will present you with a GetClass() dialog box to select the class. The item added to the Gallery will automatically be assigned the name of the class, but again, you can change this to a friendlier name through the Properties dialog box.

    This is all you have to do to create a catalog for your classes. Note that the Gallery is smart enough to attach the proper behavior to your new class item. You can double-click on your class to edit it; you can drag and drop it to the form or class designer to create an instance; you can right-click on the item and open the class in the Class Browser; and much more. As you can see in Figure 7, the Gallery can handle a large number of different items and attaches the right behavior to them. This way, report items can be printed or previewed, video files can be played, tables can be opened, and so forth.

    But what if you’d like to add items that the Gallery isn’t aware of? A little while ago I wrote a public domain utility called GenRepoX (you can download it for free from www.eps-software.com). It extends the Visual FoxPro Report Writer, but it uses the internal report engine. Reports can be modified in the same way regular Visual FoxPro reports can be modified, but to execute the reports, a special function has to be called. Otherwise, the special features provided by GenRepoX will be lost. The Gallery is aware of reports and allows modifying, printing, and previewing them, but of course it isn’t aware of GenRepoX. Luckily, there are ways to teach the Gallery new behaviors.

    All Component Gallery behaviors are encapsulated in individual objects. The source code of those classes ships with Visual FoxPro in the _gallery.vcx and vfpglry.vcx class libraries. The behavior you need for GenRepoX is very similar to a regular report behavior, which is defined in the _reportitem class in the vfpglry.vcx library. To reuse what’s already there, you can simply subclass this behavior. I chose to call the subclass “GenRepoXItem.”

    There are two methods we’re interested in: Run() and SetMenu(). Those methods do what you think they would. Run() executes the item, and SetMenu() creates the right-click menu. Our major modification will be making the Run() method aware of GenRepoX, which can be done like so:

      
    

    I basically overwrite all of the default behavior and replace it with my own, which is rather simple in this case, since all I do is execute the report in preview mode. In the second line, I create a command that executes the report. Note that the cFileName property tells us what report filename the item is linked to (once it’s used in a catalog). In line 3, I execute the report by running it through the GenRepoX() method.

    This is enough to make the new item work. However, I’d also like to give the user a little visual clue that the item at hand isn’t a standard report, so I decided to modify the menu. The SetMenu() method is responsible for displaying the menu. Each behavior provided by the Gallery has default menu items. Some of those items are defined in each behavior, others (such as Cut, Copy, and Properties) are provided by the parent class used for all items, named “_item.” In our scenario, I’d like all of the default items, but I don’t want report-specific items, since I want to introduce my own. In do this in the following fashion:

      
    

    In line 3, I execute the item defined in the _item class. Note that I specifically name the class rather than issuing a DoDefault(), because I intend to skip the behavior defined in the direct parent class, which is the report item.

    In the next line, I add a new menu item using the AddMenuBar() method, which exists on every Gallery item. Parameter one specifies the caption, and parameter two specifies the method that’s to be executed when the item is selected. In this case, I simply execute the Modify() method, which I inherited from the standard report item. Note the special “oTHIS…” syntax. oTHIS is a special pointer that allows me to access the current object. The SetMenu() method is called by a Gallery internal mechanism, so by the time the menu is actually displayed, my object isn’t accessible through the THIS pointer anymore, which is the reason for this special naming convention used by the Gallery.

    The last parameter is interesting, too. From within an item, “THIS.oHost” always links you to an instance of the Gallery itself. The Gallery has a property named “lRunFileDefault” that tells you whether the Gallery is configured to run items whey they’re double-clicked (.T.) or modify them (.F.). In the menu, I’ll print the default item in bold as required by the Windows interface guidelines. I specify this using the last parameter. So if lRunDefaultFile is set to .F., I pass a .T. as the parameter, and vice versa.

    I’m sure you can now figure out the last line by yourself. It simply displays another menu item labeled “Preview GenRepoX,” and it executes the Run() method (the one I coded earlier) when selected.

    Now all that’s left to do is tell the Gallery about the new item type. I do that in the Properties dialog box of the main catalog item (see Figure 8).

    From now on, the new item shows up in the New Item menu (see Figure 9).

    Once you’ve added a GenRepoX report item, you can right-click it to see and use the behavior you added. Note that the item also exhibits default behavior that makes a lot of sense for our use. The icon defaults to a report, for instance (see Figure 10). In addition, the item uses the custom menu and behavior. You can use the right-click menu or double-click the item to execute the GenRepoX report.

    The options outlined in this article only represent a small example of what’s possible with custom items. The possibilities are truly endless. You can find more information about this subject on the Microsoft Visual FoxPro Web site (https://msdn.Microsoft.com/vfoxpro), as well as in the documentation and in several books (such as my own <s>).

    So far, so good. The new catalog is coming along nicely. But what if a user I’ve provided this catalog to has questions? Perhaps I should provide a link to my Web site. I can do this easily by adding a dynamic folder to my catalog. I add the folder just like any other folder, but this time, I set the folder’s “Dynamic folder” property (in the Node page of the folder’s Properties dialog box) to www.eps-software.com. That’s all there is to it!

    Conclusion

    The Component Gallery is a very powerful tool. Unfortunately, there have been very few products and projects that make use of it. Partly, this appears to be due to the poor documentation, but it’s also due to the not terribly obvious advantages the tool provides. However, once you’ve started using the Gallery, you’ll have a hard time living without it.

    If you have questions regarding the Gallery’s use, custom catalogs, and even AddIns (a possibility I couldn’t discuss in this article), feel free to e-mail me at Markus@eps-software.com.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the April 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    Understanding COM+ with VFP, Part 1 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    Understanding COM+ with VFP, Part 1

    Craig Berntson

    When COM+ debuted in Windows 2000, it introduced many new capabilities to enhance n-tier applications. Now with VFP 7, you can use these enhancements to make your applications more robust. In this first installment of a series, Craig Berntson reviews COM and MTS, and then introduces COM+.

    For many years, we’ve heard about the importance of breaking applications into multiple tiers or services. By splitting the user interface, business rules, and database access, we can easily modify or completely replace one service without affecting the others.

    Historically, Visual FoxPro applications have been single-tier solutions, even if the data resides on the server. This is because developers have mixed the user interface, business rules, and data access into one application or even the same form.

    With the use of SQL Server, we move to a two-tier scenario. The data is normally accessed via ODBC by the use of Remote Views or SQL pass through. Stored procedures are often called on the server, and the SQL SELECT statement is resolved before sending any data across the wire. It’s the splitting of the processing onto the server and the workstation that makes this design two-tier.

    In a three-tier solution, the user interface only displays data and accepts input from the user. There might be some minor data validation, such as ensuring that the required fields are populated or limiting the user’s selection via a list or combo box. However, all of the actual processing of the data takes place in a separate component that holds all of the business rules. Calculations of totals or taxes, validation of data, or the generating of report data are examples of things that occur in the middle-tier business logic. Finally, the data tier is responsible for the reading and writing of data into the data store. The user interface should never directly access the data services, but should go through the business services layer to get at the data.

    This separating of multiple tiers is what Microsoft calls the Distributed interNetworking Architecture, or DNA. The different components of each service can reside on the same computer, making a logical separation of each service—or, on multiple computers, providing a physical separation of the tiers. Typically, the user interface resides on the client computer, while the business and data components reside on an application server with the data store on a second server. When access is via a Web browser, an additional server for IIS is often added to the mix.

    COMmon knowledge

    The way to access these components is via the Component Object Model. COM is a specification that allows components written in different languages to interact with each other. Therefore, we can create a component in VFP that can be accessed from a VB or Delphi application, or even from Word or Excel. ActiveX controls are another example of COM objects. When you control Word or Excel from your VFP application, it’s done via COM.

    The first thing to consider when creating a COM component is how it will fit in with the other pieces of your application. In other words, you need to determine whether it should run in-process or out-of-process.

    An in-process component is compiled as a DLL and must be hosted by an executable program. It runs in its host’s memory space—hence the name in-process—which makes instantiating (running) the component fast. Data is marshaled (passed) across the COM boundary. Because the component runs in the same memory space as the application, if the component crashes, it most likely will cause the application to crash. One other thing to keep in mind: In-process servers written in VFP can’t have any user interface exposed.

    An out-of-process server is compiled as an EXE and runs in its own memory space. When it’s instantiated, there’s some overhead required such as allocation of memory, process id, and so on. This all takes time, which makes instantiating an out-of-process server slower than an in-process server. In addition, it takes longer to marshal data across the process boundaries from the application to the component, so it runs slower. However, because the COM server is running in a different memory space than the client application, if the component crashes, the application will quite possibly keep running.

    Creating a COM component in VFP is quite easy. The OLEPUBLIC keyword tells VFP to compile the code with the proper COM information needed for access from other applications:

      
    

    When you build the component (see Figure 1), you can choose “Win32 executable/COM server (exe)” to create an out-of-process server. To build an in-process server, select either “Single-threaded COM server (dll)” or “Multi-threaded COM server (dll).” I’ll talk more about the difference between the two types of DLLs later. Building the component will automatically register it on the development computer. You then instantiate it using the CreateObject() function:

      
    

    Many of the rules and intricacies of COM are automatically handled for us by VFP. However, we have to manually follow one rule. That rule states that we should never change the interface of a component. If we do, we need to create a new ID for the component. By interface, I don’t mean user interface, but the public methods and parameters of the component. Let’s look at the preceding example. If we add a third parameter to the Multiply method, we change the interface and need to create a new component ID. This is done on the Build dialog box. The last option on the dialog box is “Regenerate Component IDs.” Check the option to create a new GUID for the component.

    When you start deploying your COM components on remote servers, you’ll access them via Distributed COM (DCOM). Historically, under DCOM, you distribute an out-of-process server and set up the calling information on the client computer. Chapter 16 of the VFP Programmer’s Guide goes into detail about how to do this. When you install the component on a remote server, the code runs on the server, not on the client workstation. Don’t have any UI in your server because it will display on the server, not the client workstation.

    MTS to the rescue

    Microsoft saw the need for a better way for remote components to run, so they created Microsoft Transaction Server (MTS). Originally available for NT and Windows 9x through the NT 4.0 Option Pack, MTS solved a number of problems by providing a host for COM DLLs. It also provided a wizard that set up all of the DCOM calls on the client station for you. Some other features of MTS include:

    • Just-in-Time Activation: A component is kept on disk and then brought into memory (activated) only when needed.
    • Object Request Broker (ORB): MTS will handle multiple calls to the same component from multiple clients.
    • Transaction Services: Commits and aborts are handled by the Distributed Transaction Coordinator (DTC) instead of the application. This makes it possible to have a transaction that spans multiple databases.
    • Role-based Security: The security scheme allows you to determine who can access your components based on NT logins and groups. If a user doesn’t have authorization to access a component, an error message is returned to the client indicating that the component can’t be instantiated.
    • Connection Pooling: Typically, an application will make a connection to the data store, and then hold that connection during the life of the application. MTS allows multiple clients to use the same connection.

    Creating components for use under MTS requires that you think differently about your application design. First, your application should be stateless. This means that your client program should instantiate the component, make calls to a method, and then release the component. The connection to the component should be as short a time as possible. You should avoid setting properties and pass all of the needed information as parameters. Note that COM doesn’t allow parameters to be passed to the Init method.

    You also need to think about threading. We typically think of threading as single or multi-threading. VFP creates single-threaded applications. That is, it can only do one thing at a time. This is like going to the grocery store and only having one checkout stand open. All customers must go through the same line. Only one customer at a time can be helped. The others wait in the queue for their items to be processed.

    Multi-threading allows your application to split processing into different pieces, all running simultaneously. Using the grocery store example, you can unload parts of your shopping cart into different lines and have all of your groceries rung up at the same time.

    MTS uses a third type of threading, apartment model. Again using our grocery store example, customers may choose any open checkout stand, but once you’ve chosen one, you always have to use the same one. Luckily, MTS will open a new line for us when all are used.

    So, how do we make use of MTS in our VFP components? First, we have to add some code. Let’s modify our Multiply example to handle MTS.

      
    

    The Context object contains information about our particular instance of the COM component. Also, note the call to SetComplete(). This will commit any open transactions. If we need to abort the transaction, we would call SetAbort() instead.

    When we build our component, we can’t use “Win32 executable/COM server (exe).” MTS requires that components be DLLs. That leaves us with two choices: single or multi-threaded.

    The single-threaded DLL is a good choice when the method call will be very fast or there’s the possibility that only one user will hit it.

    The multi-threaded DLL isn’t truly multi-threaded. It’s apartment-model threaded. Make this choice when the method call is slow or many users will simultaneously call your component.

    Once you’ve built your component, you install it on the server with the appropriate VFP runtime libraries. Then, you create an MTS package and import your component using the MTS Explorer. Using MTS Explorer, you can set security and transactional support, and export a client setup program.

    You can get more information on MTS from Randy Brown’s article, “Microsoft Transaction Server for Visual FoxPro Developers,”.

    Windows 2000

    When Microsoft introduced Windows 2000, it came with several new services. One of those is COM+. Basically, COM+ is the marrying of COM and MTS, but new COM+ features were also introduced. Under Windows NT, MTS ran on top of the operating system. Under Windows 2000, it’s integrated into the OS. COM+ is only available in Windows 2000. However, Windows 95, 98, Me, and NT users can use COM+ components running on a Windows 2000 server. COM+ not only includes (and enhances) the features of MTS, but also introduces new services: Queued Components (QC), Loosely Coupled Events (LCE), Object Pooling, and Dynamic Load Balancing. In the next installment of this series, we’ll begin to delve into these services in detail.

    COM+ Applications are administered through the Component Services Manager (see Figure 2). You’ll find it in the Administrative Tools group in the Windows Control Panel. Let’s walk through registering the component that we saw earlier.

    1. Expand the tree under Component Services until COM+ Applications is available.
    2. Click on COM+ Applications to make it the currently selected node, and then right-click on COM+ Applications.
    3. From the context menu, select “New Application” to launch the COM Application Wizard. Then click Next.
    4. Click “Create an empty application” (see Figure 3).
    5. Enter the name for your application. In the example, I’ve called it “MyFirstCOMApp.” Then select the Activation Type. Normally, you’ll select Server application because your component will run on a server. If you install the component on a workstation and want it to run in your application’s memory space, then select Library application (see Figure 4). Click Next.
    6. Select the User ID that the component will run under. When installing on a server, it’s a good idea to set up a user specifically for your component. Be sure to assign the proper rights to the user so that the component will have access to all of the drives, directories, and resources that will be needed (see Figure 5). Click Next, then Finish.

    We now have the application set up, but it doesn’t contain any components. We have to add the component to the application:

    1. Click the plus sign (“+”) next to our new COM+ Application to expand the tree.
    2. Click on Components, and then right-click on Components. Select New Component from the context menu to launch the Component Install Wizard. Click Next.
    3. The wizard gives you three options: Install new component, Import component(s) that are already registered, or Install new event class(es). We’ll use the third option when I talk about Loosely Coupled Events. The second option, Import component(s) that are already registered, is used when you’ve previously installed the component on the computer. However, at the time this was written, there was a bug in Windows 2000 that caused this option to not work correctly. That leaves option 1. Click the button next to this option (see Figure 6).
    4. You’ll next be prompted to select the DLLs to install. If you don’t have the proper VFP runtime files installed, you won’t be able to select and install your component (see Figure 7). Once you’ve selected your components, click Next, then Finish.

    Now that your component is installed, how do you access it? The same way as before. Just use CREATEOBJECT() to instantiate the component and you’re ready to go.

    Summary

    We’ve covered quite a bit of ground in this article, but most of it should be review. You might be wondering whether all of this COM stuff is still useful in a .NET world. The answer is Yes! COM still exists in .NET. In fact, .NET was originally called COM+ 2.0. In upcoming articles in this series, I’ll discuss security, distribution, loosely coupled events, transactions, queued components, and other COM+ features.

    A GUID (pronounced GOO-id) is a Globally Unique Identifier. It’s a 128-bit Integer and looks something like {1EF10DF8-8BF9-4CD7-860A-8DCD84EA3197}. The GUID is generated using a combination of the current date and time, a counter, and the IEEE machine identifier from the network card. The chances of two GUIDs being the same are extremely remote.

    So how is this GUID used? When you build a component, three files are produced. The first is the DLL, and the second is a Type Library (TLB). The TLB is a binary file that lists all of the public classes, properties, methods, and events in your automation server. The third file is a Registry file (VBR). This lists the GUIDs for your server and is used to register your component.

    When you register the component, the VBR file is used to make Registry entries about your component. Things like the directory location of the DLL, its threading model, and its public interfaces are placed in the Registry. When you instantiate the component, the server name—for example, Excel.Application—is looked up in the Registry. The GUID will then be used to get additional information about the component, such as the directory location and public interfaces.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the May 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    Understanding COM+ with VFP, Part 2 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    Understanding COM+ with VFP, Part 2

    Craig Berntson

    In Part 2 of this series, Craig Berntson examines client distribution, security, and error handling.

    In Part 1 of this series (see the May 2001 issue of FoxTalk), I reviewed COM and MTS and introduced COM+ services under Windows 2000. I also showed you how to create a new COM+ application and install a component on the server. Now in Part 2, I’ll look at how to get the client to use the component on the server, security, and error handling.

    Is the client always right?

    Last month, I showed you how to install your application on the server. But that doesn’t do much good if you can’t get to the component from the client. The good news is, Windows 2000 makes it easy to set things up on the client. Let’s go back to the component we built and installed last month. As a quick review, here’s the component code:

      
    

    I call this the world’s dumbest COM component. All it does is multiply two numbers. However, keeping the sample code simple allows us to concentrate on the COM+ aspects of the example.

    Now we need to do an install on the client. Let’s go back to the Component Services Manager. Expand the tree under COM+ Applications and select MyFirstCOMApp. This is the COM+ Application that we built and installed last month. Now right-click on MyFirstCOMApp and select Export. The COM Application Export Wizard will appear (see Figure 1). You’re first prompted to enter the full path and filename for the application file. Enter C:COMAppsMyFirstCOMAppProxy. Then make sure you’ve selected “Application Proxy—Install on other machines to enable access to this machine.” (The other option, “Server Application,” is used when you want to install the component on another server.) Then click Next and then Finish.

    The wizard has created two files—MyFirstCOMAppProxy.MSI.CAB and MyFirstCOMAppProxy.MSI. These files can be copied and installed on the client computer. These files don’t include the component. You don’t need it on the client. They contain information on the public methods and properties of the component and pointers to the server so that Windows can find the component and instantiate it.

    Again, you never install the component on the client. Instead, you install a proxy. Your application thinks the component is installed and running locally, but it isn’t. Make note of this. A component installed on an application server never runs on the client. For some reason, this is a difficult concept for some people to understand.

    You instantiate the server component exactly the same way you instantiate a local component. Try this in the Command Window:

      
    

    Why did this work? VFP makes a call to Windows, asking for the component to be instantiated. Windows looks up the component information in the Registry and finds that the component lives on an application server. Windows then instantiates a proxy to the component and makes a call to the server to instantiate the component. VFP doesn’t know it’s talking to the proxy; it thinks it’s talking directly to the component. When you call the Multiply method, the proxy sends the call to the server via DCOM and the result is passed back to the proxy, which passes it on to VFP.

    Are you feeling insecure?

    Now that the component is installed on the server and the client proxies are installed, let’s see how easily we can grant or prohibit access to the component. COM+ uses role-based security. A role is a type of user. For example, in a bank you might have tellers, managers, loan officers, customer service people, and so forth. Each of these people is a role. You want to prohibit tellers from making loans, so in COM+, you could set up security on a loan component to prohibit this. The nice thing is that this is a configuration option and easy to change using the Component Services Manager.

    Roles are based on Windows users and groups, so the first step in setting up the security scheme is to establish the Windows security groups. It can be confusing to understand where roles fit in the hierarchy of groups and users. The COM+ Help file states, “Roles are categories of users that have been defined for the application for the purpose of determining access permissions to the application’s resources. The developer assigns the roles (as symbolic user categories) to the application.” That sounds a lot like a Windows user group to me, so to keep it easy, think of a role as a user group that’s application-specific.

    Now, getting back to our bank example, we’d have four groups: tellers, managers, loan officers, and customer service. Go ahead and create them on the server using Windows User Manager in NT or the Computer Management Applet in Windows 2000. Enter the first user group, and then the other three.

    Once those groups are created, go back to MyFirstCOMApp in the Component Services Manager. Click on Roles, and then right-click and select New Role. Enter the first role, Teller, and click OK (see Figure 2). It’s not necessary to name the roles the same as the Windows user groups, but it makes management easier. Now create the three remaining roles of Manager, Loan Officer, and Customer Service.

    Next we need to identify the users in each role. Expand the tree under Teller. You’ll see a folder labeled “Users.” Click on the folder, and then right-click and select New User. Scroll down the list of Windows users and groups and select the Tellers user group, and then click Add. Do the same for Managers and Customer Service. Then click OK. You’ll see each of the Windows Security groups added to the Teller role in Component Services (see Figure 3).

    When new users are added to the system, they’re added to the proper Windows group, which in turn automatically puts them in the proper role. So far, we’ve identified the roles, but we haven’t told Component Services to use any security. Click on MyFirstCOMApp, right-click and select Properties, and then select the Security tab. Check “Enforce access checks for this application,” and then click OK (see Figure 4). Ignore the other options for now, I’ll discuss them shortly.

    Now right-click on MyComm.Math and select Properties, then the Security tab. You’ll see that “Enforce component level access checks” is selected. You’ll also see the security roles listed. Simply check the roles that are to have access to this component (see Figure 5).

    You can drill down and assign the security access to the interface or method level if you want. This enables you to have a single component with several interfaces, each having different security levels. If a user doesn’t have the proper access to use a component, an error message is returned stating that the component couldn’t be instantiated.

    Now, let’s go back to the Application Security dialog box (see Figure 4). There are some additional options that I need to discuss. The first is Security level. This controls when COM+ validates the user’s security. With the first option, “Perform access checks only at the process level,” role-checking won’t be done at the component, interface, or method levels. Under the second option, “Perform access checks at the process and component level,” the security role is checked when a call is made to the component. You’ll almost always use the second option. However, the first option is useful when you’ve already validated the user.

    The next setting is “Authentication level for calls.” There are six options, as described in Table 1. As you move through the list, each option gets progressively more secure. Note that the higher the level of security, the longer it takes to validate the user. The default level is Packet.

    Table 1. Authentication levels.Expand table

    LevelDescription
    NoneNo authentication.
    ConnectChecks security only when the client connects to the component.
    CallCheck security at the beginning of every call.
    PacketChecks security and validates that all data was received.
    Packet IntegrityChecks security and validates that none of the data was modified in transit.
    Packet PrivacyChecks security and encrypts the packet.

    Finally, we have “Impersonation level.” This sets the level of authority that the component gives to other processes. There are four different levels as described in Table 2. The default is Impersonate.

    Table 2. Impersonation levels.Expand table

    LevelDescription
    AnonymousThe second process knows nothing about the client.
    IdentifyThe second process can identify who the client is.
    ImpersonateThe second process can impersonate the client, but only for processes on the same server.
    DelegateThe second process can impersonate the client in all instances.

    Thus far, I’ve discussed declarative, role-based security, which is defined and managed at runtime. You can also use programmatic security. This allows you to branch your code based on the access level of the user. For example, a loan officer might only be able to authorize a loan up to $50,000. After that, it takes a manager’s approval to authorize the loan.

      
    

    By using both role-based and programmatic security, you can support just about any security scheme that you need.

    Error handling

    One of the questions I often see on online forums is, “How do I report an error back to the user?” If you think about this, the answer doesn’t seem easy. You can’t display any dialog boxes with the error from your component. It’s running on a different computer than the user interface. VFP has the COMRETURNERROR() function to send the error message back to the client. COMRETURNERROR() takes two parameters. The first is the name of the module where the error occurred. The second is the message to display to the user. Let’s look at the code.

      
    

    Now compile the code into a DLL and instantiate it.

      
    

    You might expect “This will never be displayed” to show on the VFP desktop. However, an error dialog box appears instead.

    You can return any error information you want in the message parameter. You also might want to enhance the error method by capturing additional information using AERROR() or writing information to an error log. There’s one caveat: The Error method won’t fire if an error occurs in the Init method.

    Conclusion

    That pretty much covers installation, security, and error handling. Next month, I’ll discuss transactions and see how COM+ and VFP 7 allow us to include VFP data in transactions, something that couldn’t be done with MTS and VFP 6.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the June 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    Understanding COM+ with VFP, Part 3 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    Understanding COM+ with VFP, Part 3

    Craig Berntson

    Transactions are an important part of any data update mechanism. Part 3 of this series by Craig Berntson introduces the Distributed Transaction Coordinator and explains how to use transactions under COM+.

    Transactions, transactions, transactions. Without them, we can’t be sure that data is getting written to all of the Tables involved in an update. Before digging into how transactions work in COM+, let’s do a quick review of transactions.

    A review of transactions

    Joe wants to transfer $100 from his savings account to his checking account. He walks up to the ATM, inserts his card, and presses the buttons to initiate the transfer. Behind the scenes, this transfer can be accomplished two ways. The first way is that the balance of Joe’s savings account can be reduced by $100 and then his checking account balance increased by $100. The second option is that his checking account balance can be increased and then his savings account balance decreased. But what happens if there’s a system crash between the two updates? Under the first scenario, Joe isn’t happy. He’s lost $100. Under the second example, Joe is very happy. He’s $100 richer, but the bank has now lost $100. What we want is that, in the event of the aforementioned crash, either both accounts must be updated or neither of the accounts updated. To ensure that this happens is the purpose of transactions.

    Transactions should follow the ACID rule—that is Atomicity, Consistency, Isolation, and Durability. Atomicity means that either all or none of the update is committed. Consistency means that if the transaction fails, the data is returned to the same state as before the transaction started. Isolation means that one transaction doesn’t know what another transaction is doing. Finally, Durability means that the transaction state is kept, no matter what happens to the system. This is generally handled through the use of a transaction log.

    We can implement transactions on our VFP data by using the BEGIN TRANSACTION/END TRANSACTION/ROLLBACK commands. This pseudo-code shows the preceding example:

      
    

    The transactions in VFP only work with VFP data, and VFP transactions fail the Durability rule of ACID. There’s no transaction logging.

    If we’re using SQL Server, we need to use a different mechanism. We can use ADO commands to tell SQL Server when to begin and end a transaction or we can code it in a stored procedure. However, what happens if the savings account is in SQL Server and the checking account data is in Oracle? SQL Server transactions will only work on SQL Server, and Oracle transactions will only work on Oracle. We need a single transaction that will work against both databases. That’s where the Distributed Transaction Coordinator (DTC) comes in.

    Using the DTC

    The DTC allows us to have transactions that cross databases. This means that we can have data in both SQL Server and Oracle that will be updated by the same transaction. Under MTS and VFP 6, Fox data couldn’t participate in a DTS transaction. (This changes under COM+ and VFP7. More on that later.) Back to the DTC.

    The DTS uses a two-phase commit. Basically, in phase one, DTS asks the database if it can do an update. If all of the databases respond yes to this question, then phase two begins, in which DTS tells the database to update the data. If any of the databases respond with a no, then DTS tells all of the databases to roll back the update.

    Let’s look at how transactions were handled under MTS:

      
    

    Note that when we either commit or abort the transaction, MTS will also release the component. This means that if the very next command in our application needs the component, we have to do another CREATEOBJECT() on the client. Let’s see how this changes in COM+:

      
    

    In this example, we can either commit or abort the transaction with SetMyTransactionVote, but still keep the instance of the component active until we explicitly call SetDeactivateOnReturn with a .T. parameter.

    You might now be wondering where the DTC fits in. COM+ automatically calls the DTC for us. The DTC talks to the database through the use of a Resource Manager. MTS and COM+ ship with Resource Managers for Oracle and SQL Server, but not for VFP. That’s why VFP data couldn’t take part in MTS transactions.

    It turns out that Resource Managers are very difficult to implement. So, COM+ has what are called Compensating Resource Managers (CRMs). CRMs are easier to implement than a Resource Manager. By using a CRM we can have our Fox data be involved in DTC transactions.

    A CRM consists of two parts, the CRM Worker and the CRM Compensator. These correspond to the two-phased commit of the DTC. A detailed discussion of the CRM is beyond the scope of this article. However, VFP 7 ships with a CRM sample application. You’ll find it in the SAMPLESCOM+CRM folder under your VFP 7 installation.

    Configuring COM+ transactions

    Like many of the features in COM+, transactions are managed at runtime. Open the Component Services Manager applet and drill down to one of your components. Right-click on the component and select Properties, and then select the Transactions tab. You’ll see five transaction settings (see Figure 1 and Table 1).

    Table 1. Transaction types supported for COM+ components.Expand table

    SettingDescription
    DisabledTransactions aren’t needed. Set this when you don’t want the extra overhead of a transaction—for example, a component that doesn’t update any data.
    Not SupportedPrevents a component from using a transaction, regardless of the transactional state of the calling component.
    SupportedThe component participates in the transaction if one is active.
    RequiredThe component participates in the transaction if one is active. If there’s no active transaction, a new one is started.
    Requires NewA new transaction is always started.

    You’ll also notice the “Override global transaction timeout value” check box. When you select Required or Requires New transactions, this check box becomes enabled. You can then enter the number of seconds the transaction will run before timing out.

    That’s it for transactions. In Part 4, we’ll look at a COM+ feature that gives you asynchronous calls: Queued Components.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the July 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    Decorating for the Busy Developer 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    Decorating for the Busy Developer

    Lauren Clarke

    Decorating or “wrapping” an object represents a flexible alternative to subclassing. In this article, Lauren Clarke explains what a decorator is, demonstrates a novel way to implement the pattern in Visual FoxPro, and provides some application ideas.

    If you’re like me, your eyes tend to glaze over a bit when object-oriented design pattern terms are thrown about. The word “decorator” is one of those terms, and due in part to the image of Martha Stewart it immediately conjures up, and the complete lack of tasteful decorations in most programmers’ lairs, it leaves one wondering what decorations and programming have to do with each other. Decorator (a noun) is a design pattern that uses aggregation (another OOP term, which means one object holds a reference to another) to “wrap” an object and perhaps provide some additional features not present in the wrapped object. Simply put, a decorator is a class that provides a “skin” around another object to which one wishes to add new responsibilities at runtime. A simple example follows.

    Consider the object that SCATTER NAME creates in VFP:

      
    

    This line of code creates an object with properties that correspond to the fields of the table in the current workarea, and property values corresponding to the values of those fields. This process represents a nice, lightweight alternative to assigning the properties of a custom data object from the fields of a table. However, wouldn’t it be nice if loData could do something other than store field values? It’d be nice if it had methods you could use in your day-to-day life as a developer working with this object. For example, what if it could validate itself, or render itself as an XML string, or save itself? The trouble is that we don’t have access to the internal Visual FoxPro class used to create loData. We can’t create subclasses of it, and even if we could, we couldn’t force SCATTER NAME to use our subclass instead of the base class. So we have an object that we’d like to endow… decorate… with new abilities, and we can’t (or don’t want to) create a subclass to deal with these new responsibilities. So, we’re going to implement a method of extending the abilities of the SCATTER NAME object at runtime. Enter the decorator pattern.

      
    

    Well, that was a bunch of work (but don’t worry, I’m going to show you a way to avoid most of it). Let’s go over the highlights of this class. First, note that we have a property for each field in our customer table. Also, we have a property oData that will hold a reference to our SCATTER NAME generated data object. Finally, we have a property cFullName that will provide the customer’s full name based on the cFname and cLname fields. Then, we have a bevy of access and assign methods that serve to link the oData properties to the decorator’s properties. With this construct in place, the following expressions will both return the same value:

      
    

    The access and assign approach ties us to version 6.0 or later of VFP. The alternative is to use GetProp() and SetProp() methods to provide access to the wrapped object. For example, we could have a GetFname() function that would return oData.cFname, but this really makes the wrapper less than transparent, which isn’t desirable. Finally, note that the INIT() method takes as a parameter a reference to the data object to be wrapped by the class. Okay, let’s put our decorator to work.

    We’ll dissect the following code snippet line by line:

      
    

    First, we create a standard SCATTER NAME object. The BLANK keyword indicates the object will be created with empty properties.

      
    

    Next, we assign our new object a first and last name.

      
    

    Nothing spectacular so far, but this next line is the point at which the rabbit goes into the hat.

      
    

    Here, we instantiate a class DecoCust1, the init function of this class takes an object as a parameter, and we send our SCATTER NAME generated loData object for this parameter. DecoCust1 wraps itself around loData and augments its abilities. Note that we reuse the loData variable name to store a pointer to our new instance of DecoCust1. This isn’t necessary, but since DecoCust1 will seamlessly wrap our data object, presenting all of its original properties as if it were the old loData, it’s natural to do so. In our case, DecoCust1 has an IsValid() method, and we can use this to validate Mr. Yellow.

      
    

    If we pass this test, a record is added to the current table and we fire the Save() method, which will save the record to the table.

      
    

    Now that the object has been created and is decorated with additional properties and methods, we can check our record with IsValid(), save it with Save(), render it to XML with toXML(), and all the while we can still reference the objects’ original properties:

      
    

    And we also have an additional property calculated from underlying fields.

      
    

    To summarize, we have a class DecoCust1, which adds a cFullName property, IsValid(), Save(), and toXML() methods (and potentially many other useful methods) to our SCATTER NAME generated data object. From the developer’s standpoint, there’s very little practical difference between the wrapper and a bona fide subclass of the Visual FoxPro data object class. The key point, of course, is that you can’t subclass Visual FoxPro’s data object class. Also note that these abilities were added at runtime, meaning we have the option of adding these abilities if and when they’re needed without instantiating a large feature-ridden class each time a record object is needed.

    Another real-world sample of a decorator, csZIP/csUnZip, is available in the accompanying Download file. It decorates the popular DynaZip utility to provide some simplifications and extensions that are helpful when using the utility from within VFP.

    Subclasses vs. decorators

    Decorators offer an alternative to subclassing, but they must be used judiciously. The advantages come from the fact that you can gain subclass-like behavior for classes that you can’t actually subclass. Also, you’re given more flexibility at runtime to endow your objects with abilities only if they need it to fulfill the current task. In our example, there might be many places in an application where the base FoxPro data object will suffice. This being the case, it would be a shame to have to instantiate and use a complicated and expensive class where the lightweight class would do. Decorators offer “pay as you go” options where one can add functionality as needed. It’s possible to nest decorators inside decorators. If we decided that mixing the validation code and the XML rendering code in one class made it too large and inflexible, we could create a separate decorator for each task. For example, we could start with the basic data object:

      
    

    Then, if necessary, endow it with the ability to validate its properties:

      
    

    Then, if needed, we could decorate again and gain some rendering functionality:

      
    

    Which would allow us to do things like this:

      
    

    or this:

      
    

    And, unless you need to validate and render your data object every time you use it, you can save a lot of overhead by avoiding the giant do-everything data class.

    The following lists summarize the pros and cons.

    Advantages of decorators:

    1. They allow extension of classes that we can’t directly subclass.
    2. They allow us to avoid deep class hierarchies.
    3. They provide a pay-as-you-go option, which avoids instantiating large feature-ridden classes when few of the features are needed.

    Disadvantages of decorators:

    1. Pass-through code must be maintained.
    2. Passing requests through to the decorated component requires a performance hit.
    3. They can complicate debugging.

    From the developer’s perspective, the single most important issue here is the maintenance of pass-through code. The access and assign code must be maintained in concert with the wrapped object. In our example, this means that each time the structure of the table changes, we’ve got some work to do in our decorator class definition. This issue is exacerbated when we’re wrapping classes that have methods as well as properties, as we have to write pass-through code for each method. In short, if the interface of the wrapped object changes, so must the wrapper. Until recently, this fact was enough to really cool one’s feet to the idea of using the decorator in anything but the most dire situations. However, version 6.0 of Visual FoxPro gives us an opportunity to generalize decorator classes and completely eliminate this fragile use-case specific pass-through code. Our rescue comes in the form of the THIS_ACCESS method.

    THIS_ACCESS overview

    THIS_ACCESS is a method that can be added to any subclass in VFP. This method will fire every time the class is accessed. This means that every time a property is set or accessed or a method is called, the THIS_ACCESS method will fire prior to that action taking place. THIS_ACCESS takes as a parameter the name of the member being accessed. (Side note: It’s too bad that THIS_ACCESS only takes the called member as a parameter; if one could also access the value being sent [in the case of a property assignment] or the parameters being sent [in the case of a method call] inside the THIS_ACCESS method, it would open a world of possibilities, but that’s off topic for this article.) THIS_ACCESS must also return a reference to the object being accessed. It’s this last requirement that we leverage to implement an almost codeless delegation scheme for a generic decorator class. Let’s redo our prior example using this new approach.

    Redecorating with THIS_ACCESS

    Here’s what the class definition for DecoCust might look like when we utilize THIS_ACCESS:

      
    

    That’s it. Notice the substantial reduction in lines of code from our previous DecoCust1 example. The “big idea” here is the THIS_ACCESS method that first checks to see whether the requested member belongs to the decorator class, and, if not, a reference to the wrapped data object is returned. This way, the decorator can decorate by adding functionality like this IsValid() while forwarding requests for the oData properties directly to the oData object.

    Also, notice that the DecoCust2 class is very generic. The IsValid() and toXML() methods could be removed and we’d have a nice BaseDeco class to wrap any component that we could subclass to add things like IsValid() for specific implementations.

    Paying the piper

    Wrapping a class has some costs in terms of both development and runtime. The development costs come from the need to keep the interface of the wrapper synchronized with the interface of the wrapped component. If you choose to manually maintain the interface, this can be a costly proposition—especially if the wrapped class is changing often. Using the aforementioned THIS_ACCESS trick can vastly reduce your development load, as the interface will be updated automatically. However, since THIS_ACCESS fires each time the object is used, there’s a runtime cost to be paid for this approach. Table 1 will give you an idea of the runtime costs for these different approaches.

    Table 1. The different approaches and their associated runtime costs.Expand table

    TaskSubclassDeco1Deco2
    Instantiation11.812.66
    Access decorator property10.959.90
    Assign decorator property12.2011.34
    Call decorator method10.964.48
    Access decorated property10.966.81
    Assign decorated property11.145.37
    Call decorated method12.154.88
    Key:
    • Subclass = no decorator, subclass only.
    • Deco1 = a hardwired decorator with explicit pass-through code.
    • Deco2 = a decorator implemented with THIS_ACCESS.

    This table has been normalized to be machine-independent and more readable. For each task, the “Subclass” option has been given a weight of 1 and the others scaled accordingly. So, for example, Deco2 takes 9.90 times longer to access a property than a traditional subclass. To get actual time values for your system, just run the perfcheck.prg provided in the Download file.

    Some of these factors look pretty alarming, but keep in mind the times we’re talking about here. My system, a PIII that’s limping along at 500 Mhz, takes 0.000006 seconds to access a property from Deco1, and a staggering 0.00003 to access the same property through a decorator using THIS_ACCESS (Deco2). In a real use-case, say a middle-tier data object, an application might access a data object 100 times to serve a user’s request. In this situation, the THIS_ACCESS method represents a cost of no more than 0.003 seconds in our benchmark classes. Considering the THIS_ACCESS method might eliminate hundreds of lines of high-maintenance pass-through code, this might represent a good tradeoff. However, these results do make one pause to consider carefully where to implement these techniques.

    WITH/ENDWITH and GATHER gotchas

    If you plan on using a THIS_ACCESS decorated class in a WITH/ENDWITH loop, you’ll be in for a surprise. VFP exhibits some peculiar behavior in this area. In the April 2001 issue of FoxTalk, Randy Pearson wrote an article on the advantages of the WITH/ENDWITH command. It’s likely you’ll want to use this construct with a decorated class at some point. The trouble is that VFP won’t let you. The following code won’t fire the THIS_ACCESS method of loData and will result in an error:

      
    

    A workaround is to reference the decorated component directly in the WITH construct:

      
    

    There are some differences in the behavior here between VFP 6 and VFP 7 Beta 1. Both are odd and not really consistent with the documentation on access and assign methods. There’s a program in the Download file you can use to explore the differences.

    In addition to this, while the GATHER NAME command works fine with the property-level access methods, it seems to ignore the THIS_ACCESS method at this time.

    Conclusion

    The decorator pattern offers a nice alternative to subclassing. The THIS_ACCESS method of building decorators allows us to avoid writing reams of pass-through code when building decorators in VFP. This convenience comes with a performance price, but in many situations I think the price is more than justified. I’ll leave you with one possibly interesting diversion. Look up “multiple inheritance” in a good general OOP reference. Then, take a look at our DecoCust2 class, and consider the possibility of aggregating more than one object at a time and replacing the IF/THEN in the INIT() clause with a CASE statement. Bon voyage!

    (Lauren thanks the http://fox.wikis.com community for their help in refining and testing some of the ideas presented in this article.)

    Sidebar: References

    • Design Patterns, Elements of Object Oriented Software, by E. Gamma, R. Helm, R. Johnson, and J. Vlissides (Addison Wesley, 1994, ISBN 0201633612).
    • “Simulating Multiple Inheritance,” by Michael Malak, in the April 2001 issue of Journal of Object-Oriented Programming.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the August 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    TYPE() to StringType()–Bridging a Gap 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    TYPE() to StringType()—Bridging a Gap

    Pradip Acharya

    Intuitively, you’d think that the string “123” represents a number and the string “ABC” is of type character. Right? Not according to the standard TYPE() function in VFP. If ABC happens to be a date variable, for example, the type of “ABC” will be returned as D. Yet, in many situations, we need to know the data type of the contents of an unknown string. In this article, Pradip Acharya looks at the problems associated with determining the data type of a string and describes the creation of a new function, StringType(), suited for this purpose.

    One of my customers called and said, “When I type an X in your program, I get an error message, and nothing happens. Am I doing something wrong?” I rushed over and discovered that, as always, the customer was right, and I needed to create a new function to get the customer going again.

    A generic text input box was presented to the user for entering a search parameter for scanning a specific column in a table for the presence of such a value. For example, if the user needs to look at the invoices created on a certain date, a date will be typed in. To look for all five HP motors, one would enter a numeric value of “5” and so on. I had validation code that ensured that if the user entered data that clearly wasn’t of the same type as the field to be scanned, he or she would be notified and asked to re-enter the value. For a date type field, the user incorrectly entered an X. My validation, for some reason, failed to alert the user, and an unhandled data type mismatch error led to the previously noted disruption of work.

    Dual use of the TYPE() function

    Simply put, the TYPE() function in VFP accepts as input a character string and determines whether a memory variable or a field exists by that name and, if so, what its data type is. However, this description is deceptive and limiting. More strictly, TYPE() resolves the string as an expression and checks to see whether the result makes any sense.

    To make sure that the slate is clean:

      
    

    Now let’s define a memory variable:

      
    

    ?TYPE(“XYZ”) will display D. In this mode, the TYPE() function determined the data type of a prevailing memory variable (in scope). Next, if I do ?TYPE(“123”), I’ll get N. Obviously, in this second instance, my intention has been to use the TYPE() function to check the nature of a string and not the existence of a variable, field, object, or property.

    In trying to use the TYPE() function for the two unrelated purposes, we fall into a trap. In the case study presented earlier, if the user types 123, I’ll correctly determine that the type of the value entered is numeric. If, however, the user types XYZ instead of the desired data type C, I’ll incorrectly determine the data type to be D because a date variable already exists by the name of XYZ. This was the reason behind the failure of my validation code that then led to a data type mismatch error. The target table field was of type date; the user typed a character instead of a date, and I incorrectly inferred that a date had been typed in because a date variable by that name existed and TYPE() fooled me.

    To make matters worse, if the user enters a perfectly valid date such as 07/25/2001 (assuming that the date format is set to MDY), I’ll incorrectly determine that the data type of the string is N and not D. Why N? Because 07/25/2001 evaluates to 0.0001399 as an expression, having interpreted each “/” as a division operator—unintuitive indeed! What this proves is that using the TYPE() function to determine the data type of the content of a string is a misapplication of the TYPE() function. I created a new function, StringType(), to determine the type of data contained within a string, based on a string parsing strategy, and at the same time to internally take advantage of the TYPE() function.

    Function StringType()

    The purpose of this function is to determine the type of data contained in a text string that’s passed as the only argument. Case is immaterial, and leading and trailing white space, not just spaces, are ignored (see Table 1). White space is defined in Listing 1. (Note that there’s no U for undefined category.)

    ****

    Table 1. The function returns a single-character uppercase letter.Expand table

    LLogical
    NNumeric
    IInteger
    YCurrency (for example, $53.27)
    DDate, either strict or conforming to the prevailing date format, but independent of SET CENTURY
    CNot one of the above, character, default

    ****

    Listing 1. Code for function StringType().

      
    

    This function can be useful in any situation where an unknown string is encountered and one needs to determine what kind data it contains prior to taking further action. In addition to Listing 1, the file STRTYPE.PRG is available in the Download file. Table 2 presents a comparison of the output.

    ****

    Table 2. Comparison of output.Expand table

    StringTYPE()StringType()
    “.T.”LL
    “.False.”UL
    “123.52”NN
    “123”NI
    “$53.68”UY
    “01/01/01”ND
    “//”UD
    “123abc”UC
    “m.aVarName”DependsC

    An empty string

    An empty string or a string made up of white space isn’t interpreted. The function returns “C.” You may reserve a word BLANK, for example, and ask the user to enter BLANK if a distinction is to be made between no value entered and an intended empty value. Then test for “BLANK” on return. This isn’t done inside the StringType() as supplied, although you might wish to incorporate such a test inside the code yourself and assign a special return character—perhaps E.

    Data type logical

    The function will return L if the input string is one of the following:Expand table

    .T..F..True..False.

    The inclusion of the last two is an extension.

    Data types numeric and integer

    Normally, the function will return “N” if the string contains a number. As an extension, it will return “I” if the value entered is truly an integer. “123” and “123.” will both return “I”. The distinction between “N” and “I” might be useful, for example, prior to SEEKing an integer field of Invoice numbers. Under special circumstances, strings containing character data might be incorrectly identified as numeric in the presence of embedded operators. See the “Limitation” section later in the article.

    Data type currency

    Since parsing is involved, we might as well make a special case out of numeric data when the leading character is a $ sign. For example, “$ 52.68” will return Y instead of N. Probably no one will use this option.

    Data type date

    Correctly determining a string to be of type date is a vexatious problem. The problem is split into two parts. What’s an empty date? And what’s a valid date? If the input string is enclosed in curly brackets—that is, {…}—the result returned is always “D” regardless of the validity of what lies inside the brackets. In keeping with VFP convention, an input string like “{abc}” will return a value of “D.”

    Only two character representations are recognized by StringType() as a blank date:

    • • //
    • • {}

    In-between white space is ignored. Therefore, /ss/ or { ss} will also return “D”.

    As for valid dates, internally, the TYPE() function is put to use. The problem is that VFP is highly forgiving in interpreting dates. For example, ?{4.7} will print as 04/07/2001, whereas, for our purposes, we’d like to interpret 4.7 as a numeric value and certainly not a date. Accordingly, reasonable parsing constraints have been introduced in StringType() before a string can be declared to be a date. For example, there must be two and only two identical separator characters, and the rest must be digits. Dates entered in the strict date format will also be correctly identified as date.

    Limitation—no check for operators

    In this version of StringType(), no attempt has been made to isolate an individual data item from an expression with embedded operators. “53.86” and “2+7” both will return N (or I). Should we interpret a string such as 27*3 as “C” or “N”? I don’t know. Furthermore, StringType() normally doesn’t depend on which work areas are open. Not checking for operators leaves a loophole in this regard. An input string such as “53 * Invoice.Total” will produce unpredictable output depending on whether Invoice.Total is a visible field or not. If you code a version that checks for operators and expressions and closes this loophole, I’ll be happy to get a copy.

    A wish

    TYPE() as it stands identifies a valid property of an object. If TYPE(“m.oMyObject.Size”) returns “U” or “O,” it’s not a valid property. Otherwise, the property exists. As a logical and consistent extension to this interpretation, it makes sense if TYPE() also identifies an unprotected method and returns, for example, “H” if a method by this name exists for the object. I believe this generalization will be useful.

    Conclusion

    The standard TYPE() function will return the data type of a variable but isn’t suitable for determining the data type of the contents of a string. The new function StringType() has been designed specifically for this purpose, with a few limitations. In a future article, I’ll present a utility for generic output formatting of any type of value into a printable character string.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the September 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    Create Modern Interfaces with VFP 7 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    Create Modern Interfaces with VFP 7

    Doug Hennig

    It seems that every new version of Microsoft Office changes user interface standards. Whether you like it or not, your users expect your applications to keep up with this ever-moving target. Fortunately, VFP 7 adds new features that make it easier to create interfaces similar to Office 2000. Doug Hennig explains.

    In addition to new language features (see my “Language Enhancements in VFP 7” series of articles in the January to June 2001 issues of FoxTalk), database events, support for COM+, Web Services, and a ton of other new features, VFP 7 provides some user interface improvements, including hot tracking and modern-looking toolbars and menus.

    Hot tracking

    Hot tracking means controls appear flat (rather than the three-dimensional appearance we’re used to) but change appearance as the mouse pointer moves over them. Most controls will then appear sunken (the way they normally appear with hot tracking off), except for check boxes, option buttons, and command buttons, which appear raised. For an example of hot tracking, look at the toolbars in Microsoft Office 2000 applications. As you can see in Figure 1, toolbar controls appear flat (for example, the command buttons have no outlines) until you move the mouse over them.

    Hot tracking is easy to turn on in VFP 7: Simply set the SpecialEffect property to 2 (for check boxes and option buttons, you also have to set Style to 1-Graphical). For control classes that might have to be used in earlier versions of VFP, you should set this property programmatically (such as in the Init method) rather than in the Property Window to prevent an error when the control is used in those versions. Here’s an example (taken from SFToolbarButton in SFBUTTON.VCX):

      
    

    clVFP7ORLATER is a constant defined in SFCTRLS.H, the include file for SFToolbarButton, as follows:

      
    

    Since version(5) was added in VFP 6, the type() test and use of evaluate() in this statement ensure that it will work even in VFP 5.

    You can create other types of effects with code in the new MouseEnter and MouseLeave events. For example, you can set This.FontBold = .T. in MouseEnter and This.FontBold = .F. in MouseLeave to make a control appear bolded when the mouse is over it. You can also change the foreground or background color, and do pretty much anything else you want in these events.

    SwitchboardButton in MYCLASSES.VCX is an example. It’s used as a button in “switchboard” forms, forms that provide quick access to the major functions of an application. In VFP 7, as the user moves the mouse pointer around the form, the SwitchboardButton object under the mouse is surrounded with a blue outline (see Figure 2 for an example). SwitchboardButton is actually a container class with an image and a label. Its BorderColor is set to 0, 0, 255 (blue) and its Init method sets the BorderWidth to 0 (it’s left at the default of 1 in the Property Window so you can see it in the Class or Form Designers). The MouseEnter event sets BorderWidth to 3 and MouseLeave sets it back to 0.

    In addition to the SpecialEffect property and MouseEnter and MouseLeave events, command buttons have a new VisualEffect property. This property, which is read-only at design time, allows you to programmatically control the raised or sunken appearance of the control at runtime. Although you won’t often use this, it’s handy when several buttons should change appearance as a group. We’ll see an example of that later.

    Although you can use hot tracking wherever you want, I personally don’t care for hot tracking except in controls in toolbars (none of the dialogs in Microsoft Office use hot tracking, for example). So, rather than setting SpecialEffect to 2 in my base classes (those in SFCTRLS.VCX), I’ll do it in specific subclasses that I use for toolbars.

    To see an example of hot tracking for different types of controls, run TESTHOTTRACKING.SCX and see what happens as you move the mouse over each control.

    Toolbars

    Like other “modern” applications, toolbars in VFP 7 now have a vertical bar at the left edge when docked to provide a visual anchor to grab to move or undock the toolbar (see Figure 1). Another improvement related to toolbars is the addition of a Style property to the Separator base class; setting this property to 1 makes a Separator appear as a vertical bar at runtime (at design time, Separators are still invisible, which is kind of annoying). As with hot tracking, you might want to set this property programmatically to prevent problems with earlier versions of VFP; I use the following code in the Init method of SFSeparator (in SFCTRLS.VCX):

      
    

    Figure 3 shows the same toolbar running in VFP 6 and 7. The VFP 7 version looks and acts like a toolbar in a more modern application.

    A new style of toolbar button showing up in more and more applications is the dual button/menu control. Figure 4 shows an example of such a button, taken from Internet Explorer 5.5. Clicking on the left part of the control (the button with the image) causes an action to occur, while clicking on the down arrow displays a drop-down menu of choices. Another place I’ve seen such a control used is in West Wind Technologies’ HTML Help Builder to open Help projects. Clicking on the button displays an Open File dialog, while clicking on the down arrow displays a “most recently used” (or MRU) list of files. The advantage of this control is that it doesn’t take up much screen real estate, yet it can have a large list of choices.

    SFBUTTON.VCX has a couple of classes used to create such a control. SFDropDownMenuTrigger is a subclass of SFToolbarButton that’s sized appropriately and displays a down arrow (Caption = “6,” FontName = “Webdings,” FontSize = 6). It also has assign methods on its FontName and FontSize properties so they aren’t inadvertently changed programmatically by something like SetAll(). SFDropDownMenuButton is based on SFContainer, our container base class in SFCTRLS.VCX, and it contains an SFToolbarButton object named cmdMain and an SFDropDownMenuTrigger object named cmdMenu. The MouseEnter and MouseLeave events of each button set the VisualEffect property of the other button to 1 and 0, respectively, so the buttons’ hot tracking are synchronized. The Click event of cmdMain calls the ButtonClicked method of the container, which is empty since this is an abstract class and the desired behavior must be coded in a subclass or instance. The MouseDown event of cmdMenu has the following code to display the drop-down menu:

      
    

    Since SFContainer already has methods and code for handling shortcut menus (see my column in the February 1999 issue of FoxTalk, “A Last Look at the FFC”), why reinvent the wheel? As a refresher, the ShowMenu method of SFContainer instantiates an SFShortcutMenu object (defined in SFMENU.VCX), which is an adaptation (not subclass) of the FFC _ShortcutMenu class. SFShortcutMenu handles all of the work of displaying a shortcut menu; you just call the AddMenuBar and AddMenuSeparator methods to define the bars in the menu, and then call the ShowMenu method to display it. SFContainer.ShowMenu calls the ShortcutMenu method to do the actual work of defining the bars (that method is abstract in SFContainer).

    However, one issue SFDropDownMenuButton has to address that SFContainer doesn’t is menu placement. SFShortcutMenu automatically places the menu at the current mouse position, but if you look at Figure 4, you’ll notice the menu appears directly below the control, aligned with its left edge. To support that, I added nRow and nCol properties to SFShortcutMenu so you can control the position of the menu; if they contain 0, which they do by default, SFShortcutMenu will figure out where the menu should go, so the former behavior is maintained. The ShortcutMenu method of SFDropDownMenuButton, however, has to place the menu at the right spot, so it calculates the appropriate values for the nRow and nCol properties.

    What’s the right spot? That depends on if and where the toolbar hosting the control is docked. If the toolbar is docked at the right or bottom edges, the menu has to be placed to the left or above the control so it appears inside the VFP window. Otherwise, it has to be placed below and at the left edge of the control. The code to perform these calculations is fairly long and complex (I adapted—okay, ripped off <g>—the code from NEWTBARS.VCX in the SOLUTIONSEDONA subdirectory of the VFP samples directory), so it isn’t shown here.

    To use SFDropDownMenuButton, drop it or a subclass on a toolbar. To see an example, look at the instance named ColorPicker in the MyToolbar class in MYCLASSES.VCX, included in the Download file. ColorPicker is just a simple demonstration of this control; it allows the user to change the background color of the active form from either a pre-selected list of colors (the drop-down menu) or a color dialog (when you click on the button). The ButtonClicked method, called when the user clicks the button, displays a color dialog and sets the background color of the active form to the selected color:

      
    

    The ShortcutMenu method has the following code:

      
    

    toMenu is a reference to the SFShortcutMenu object. The first parameter for the AddMenuBar method is the prompt for the bar, and the second is the command to execute when that bar is chosen.

    Modern applications usually provide many different ways to perform the same action: main menu selections, toolbar buttons, shortcut menu selections, and so on. I’ve already discussed toolbars, and the SFShortcutMenu class makes it easy to create shortcut menus for every form and object in your application. So, let’s talk about the main menu.

    Menus haven’t changed much in FoxPro since FoxPro 2.0 (although in my August 2001 column, “Objectify Your Menus,” I presented a set of classes that make it easy to create object-oriented menus). New in VFP 7, however, are the abilities to specify pictures for bars (either the picture for a VFP system menu bar or a graphic file) and to create inverted bars that only appear when the user clicks on a chevron at the bottom of a menu popup (“MRU” menus, although the meaning of MRU here is different from how I used it earlier). These features allow us to create Office 2000-style menus.

    Specifying a picture is easy. In the VFP Menu Designer, click on the button in the Options column for a menu bar, and in the Prompt Options dialog, select File if you want to specify a graphic file or Resource if you want to use the picture for a VFP system menu bar. If you select File, you can either enter the name of the file in the picture text box or click on the button beside the text box and select it from the Open File dialog. If you chose Resource, either enter the name of the VFP system menu bar (for example, “_mfi_open”) or click on the button and select it from the dialog showing the prompts of system menu bars. In either case, a preview of the picture is shown in the Prompt Options dialog. The settings result in the PICTURE or PICTRES clauses being added to the DEFINE BAR command that will ultimately be created for this bar. If you’re using the OOP menus I presented in August, set either the cPictureFile or cPictureResource property of an SFBar object to the desired value.

    The MRU feature is more difficult to use, and much more difficult to implement in a practical manner. The DEFINE BAR command has new MRU and INVERT clauses, but because there are no specific options for either clause in the Menu Designer, you end up having to use a trick: Enter “.F.” followed by either “MRU” or “INVERT” in the Skip For option for the bar. VFP 7’s menu generator, GENMENU.PRG, is smart enough to see that you’re really using the Skip For setting as a way of sneaking other clauses into the DEFINE BAR command that the generator will create, so it leaves off the SKIP FOR .F. part of the command.

    However, that’s only the beginning. You’re responsible for managing what happens when the user selects the MRU bar (the chevron at the bottom of the menu) yourself. Typically, you’ll remove the MRU bar from the menu and add bars with the INVERT clause to the menu, but since the Menu Designer doesn’t create those bars for you, you have to code the DEFINE BAR statements yourself (although you could create the desired bar in the Menu Designer, generate the MPR file, copy the DEFINE BAR statement for the bar from the MPR, and then remove it in the Menu Designer). Also, once the user has selected one of the inverted bars, you have to add the MRU bar back to the menu and remove the inverted bars, except perhaps the selected one, which you may decide to leave in the menu as Office applications do. But then you have the complication of changing it from an inverted bar to a normal one and not adding that bar the next time the user selects the MRU bar, and that’ll only last until the user exits the application. See what I mean by “much more difficult to implement in a practical manner”?

    I can’t think of any application I’ve written in the past 20 years that was complex enough to actually use this type of MRU feature, but at least the OOP menu classes I presented in August manage a lot of this stuff for you. Set the lMRU property of an SFPad object to .T. if that pad should have an MRU bar in it, and set the lInvert property of any SFBar object to .T. to have that bar appear when the MRU bar is selected and disappear after a menu selection is made. You’ll have to subclass SFPad if you want different behavior, such as changing an inverted bar into a normal one if it’s selected.

    A more useful version of an MRU feature is the one I referred to earlier—a list of things the user has accessed recently. Office 2000 applications use this: The bottom of the File menu shows a list of the most recently accessed documents. Most VFP applications don’t use the concept of “documents,” but they do use records. It might make sense in some applications to put the most recently accessed records at the bottom of a menu so users can quickly return to a record they were working with before. Rather than automatically doing that, you might want to provide a function the user can select to add the current record to the MRU list.

    The sample application included in the Download file has an example of such a feature. First, a button in the MyToolbar class, used as the toolbar for the customers form, allows the user to “bookmark” the current record; it does so by calling the Bookmark method of the active form. That method in CUSTOMERS.SCX has the following code:

      
    

    This code expects that the Bookmark class, which we’ll look at in a moment, has been instantiated into a global variable called oBookmark. The AddBookmark method of that class expects two parameters: the command to execute when the bookmark is selected and the caption for the bookmark. In this case, the command tells VFP that if the active form is the customers form, call the Seek method of that form with the customer’s CUST_ID value (that method positions the form to the specified key value); if there’s no active form or it isn’t the customers form, call the DoForm method of the application object, telling it to run the customers form and passing the CUST_ID value (the Init method of the customers form accepts an optional CUST_ID value and calls the Seek method if it’s passed). The company name is used as the caption for the bookmark.

    The Bookmark class, in MYCLASSES.VCX, is a simple class based on SFCustom. It has a two-dimensional array called aBookmarks to store the bookmarks; the first column is the command to execute and the second is the caption. The nMaxBookmarks property determines how many bookmarks can be stored. The AddBookmark method adds a bookmark to the array and to the bottom of the File menu. Here’s the code:

      
    

    Before the first bookmark is added to the File menu, a separator bar is added above the Exit bar. Then bars for the bookmarks are added above that separator. The cBarPosition property is used to control the bar positions.

    Figure 5 shows an example of the File menu after I bookmarked four records. Selecting a bookmark opens the customers form (if necessary) and displays the chosen record.

    The Bookmark class has a couple of other methods, SaveBookmarks and RestoreBookmarks, that save and restore the bookmarks, using BOOKMARKS.DBF. These methods ensure that the user’s bookmarks are persistent between application sessions.

    Tying it all together

    The sample application shows all of the techniques discussed in this article. DO MAIN starts the application. MAIN.PRG instantiates some objects, including a simple application object and the Bookmark class, and creates a menu for the application. It then runs the SWITCHBOARD form and issues a READ EVENTS. The only functions in the menu and switchboard that do anything are Customers (which runs CUSTOMERS.SCX) and Exit.

    The switchboard form uses the SwitchboardButton class mentioned earlier to show hot tracking. The menu shows the use of MRU and inverted bars, includes pictures for some bars, and demonstrates the use of most recently used (bookmarked) records. The customers form isn’t fancy, but the toolbar it uses shows the SFDropDownMenuButton class (as a color picker), includes a button to bookmark the current record, and demonstrates the new features of VFP 7 toolbars, including buttons with hot tracking and vertical separator bars.

    VFP 7 has several new features that make it easier to create applications that look and act like Office 2000. Of course, Office XP raises the bar yet again, but for now, our applications can look more modern than VFP 6 applications could.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the October 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    Become the Master of All You Survey–Using XML as a Flexible Data Capture and Retrieval Medium 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    Become the Master of All You Survey–Using XML as a Flexible Data Capture and Retrieval Medium

    Andrew Coates

    Customer Relationship Management (CRM) systems often require that a survey or script be played for a particular customer while an agent is on the phone with them. Often, the exact content of the survey or script depends on the type of customer. In this article, Andrew Coates develops a system for capturing and retrieving such data. This technique uses XML as the storage medium for the answers to the questions and displays the enormous flexibility afforded by the use of a standard that is at once both free-form and structured.

    I recently was asked to retrofit an existing Customer Relationship Management system with the ability to capture information that my client wanted to gather from a targeted group of his customers via a telephone survey. My first thought was to add a new table to the database with a one-to-one relationship to the main table and a field for each question in the survey, as shown in Figure 1. This was probably the simplest approach, but on further reflection I realized that it lacks flexibility should my client ever want to undertake additional surveys.

    My next thought was to still have a table specific to the survey, but to have a one-to-many table allowing the entity to be linked to many survey tables. This would add some flexibility to the system in that new surveys could be added by adding a new table and adding rows to a survey master table. Information about which table referred to which survey could be stored in a survey master table, and information about which companies were eligible for which survey could be stored in a many-to-many table. This approach is illustrated in Figure 2.

    The downside to the second approach is that every time a new survey is added, a new table has to be added to the database. In addition, if a survey needs fine-tuning by adding or changing questions, then the data structure needs to be updated. While these aren’t insurmountable problems, I’d rather not have to muck around with the data structure every time my client wants to tweak the survey.

    What I needed was a flexible way of storing answers to survey questions that could still be retrieved in a structured way. I decided to store the answers directly in a text (or memo) field in the many-to-many table. To make sure that the data was still retrievable in a sensible manner, I decided to use XML as the storage format within the text field. The final layout of my database is shown in Figure 3.

    Data—the object of my desire

    The architecture I decided on for this project was one of data objects. Each set of answers to a survey is represented by a data object that has a property for each answer. The object is then converted to and from an XML representation using Rick Strahl’s ObjectToXML and XMLToObject from his (free) wwXML library. I’ve included the version of wwXML (with permission—thanks, Rick) that was current at the time of this writing in the accompanying Download file, but I strongly suggest that you visit Rick’s site (www.west-wind.com) to check whether there’s a more recent version. Rick’s constantly adding great stuff both to existing libraries and as completely new sets of useful things.

    As a companion to the data objects, there’s a GUI class. This class instantiates the appropriate data object and then the data object’s properties as control sources for its various controls. The GUI class itself does no data manipulation or handling (apart from displaying the data and allowing the user to enter or change answers). Instead, it calls the methods of the data object, which knows how to load and save itself from and to the XML data on the back end.

    Data object abstract class

    Both the data object and the GUI object are defined in the first instance as abstract classes—that is, classes that are only ever subclassed, never themselves instantiated. The data class standard properties and methods are shown in Table 1. ******

    Table 1. Methods and properties of the data object abstract class.Expand table

    Property/MethodDescription
    LoadData()Loads the XML data from the back end for the SurveyID/CompanyID combination specified in the properties.
    SaveData()Persists an XML representation of the object’s properties to the back end.
    CreateCursor()Creates a cursor with a field of the same name and of the appropriate type for each data property of the class.
    cCommentsStandard free text field available in all surveys.
    cConnectStringConnect string for use when instantiating the object and connecting to a remote back end.
    nCompanyIDID of the company to which this set of answers applies.
    nSurveyIDID of the survey from which this set of questions is taken.
    tLastUpdatedLast date/time this survey was saved for this CompanyID/SurveyID combination. Note that the default value is an empty time. You can’t just use {} for this, as this is interpreted as an empty date and the parser chokes on time values later on. You need to convert the empty date into an empty time like this: =DTOT({}).

    The code for the Init() method is shown in Listing 1.

    ****

    Listing 1. The data object’s Init() method.

      
    

    When the object is instantiated, the Init code accepts two parameters. The first parameter is an integer representing a handle of an already established connection to a back-end data source via SQLCONNECT() or SQLSTRINGCONNECT(). This gives the object an opportunity to share a connection and thus reduce the resource requirements of the application. The second parameter (which is only used if the connection handle passed is non-numeric or <= 0) allows the overriding of the SQL connect string used to establish a connection to the back end if there’s no handle passed.

    If there’s no connection handle passed, the data object’s first job is to establish a connection to the back end. If it can’t do this, there’s no use continuing and it bails out. Next it attempts to create an instance of the wwXML helper class. This class is vital for loading and saving the data to the back end, so again, if it can’t create an instance, it just bails out.

    The grunt work of the object is done by the LoadData() and SaveData() methods, shown in Listing 2 and Listing 3, respectively.

    ****

    Listing 2. Loading data from the back end.

      
    

    ****

    Listing 3. Saving the answers back to the database.

      
    

    If the method is passed XML as a parameter, it just uses that to load the values into the properties of the object (we’ll get to why this is useful a little later on). To load data from the back end, the method first checks that the company is listed for this survey. It then generates a SQL statement to retrieve any currently stored data for this company/survey combination. Finally, if there were already answers stored in the XML field, then the values are transferred to the data object’s properties with the single line:

      
    

    This is the powerhouse of the method. This single line of code transfers each property’s stored value from the XML. There are a couple of cool things to note here:

    • If the property’s been changed or added since the data was persisted to the table, the default value is used—there’s no requirement to go back through the data retrofitting changes to the survey. (Of course, it’s possible you may want to do some translations for business reasons, but the architecture we’ve used means that it’s not required from a technical standpoint.)
    • Deleting a property from the data object means that the data for that property simply won’t appear in the new version of the object, and next time the object is persisted to the table, the deleted data will simply disappear.

    Saving the properties in a data object is just as simple as loading them. Again the powerhouse of the method is a single line:

      
    

    This takes the properties in the current object and converts them to an XML representation. A sample of the XML generated by this call is shown in Listing 4.

    ****

    Listing 4. Survey answers stored in XML format.

      
    

    The rest of the method simply writes the XML string into the text field. Note that I’ve used a parameterized update command:

      
    

    The ?lcXML tells the ODBC connection to ask VFP for the value of the lcXML variable. Using this construct eliminates a large number of issues with encoding of illegal characters and so on. All of that is handled behind the scenes by the ODBC driver interface. Similarly, ?ltUpdateTime tells ODBC to ask VFP for the value of the ltUpdateTime variable. Dates are another great source of incompatibility between various back-end data sources. Letting the ODBC driver do the conversion and formatting in this way eliminates a potential headache if you change back ends.

    Adding a new survey

    The steps for adding a new survey are:

    1. Decide what questions are to be asked (or, perhaps more accurately, which answers will be recorded) and what type their answers will be.
    2. Subclass the surveybasedata class and add a property initialized to a value of the appropriate type for each answer. Override the CreateCursor() method to create a cursor with columns with the same names as the properties just added (don’t forget to add the four properties from the data base class—nSurveyID, nCompanyID, cComments, and tLastUpdated).
    3. Update the nSurveyID property for the data object subclass so this survey has a unique number.
    4. Create a subclass of the surveybase class that will present the survey to the user.
    5. Add a control or controls to the subclassed form with controlsources in the form thisform.oDataObject.<data object property>
    6. If there are any dependencies between the questions (for example, questions that should only be asked if others were answered in a certain way), then put code in the UpdateControls() method to change control states. Note that this method is called after the data object’s LoadData() method is called, so the control’s states are set initially. You should also call this method whenever there’s a potential need for a refresh. For example, if a check box state changes to true, another set of questions might become relevant.
    7. Update the cDataObjectName property with the name of the subclass you created in step 2. This ensures that the UI object instantiates the correct data object when it’s created.
    8. Make an entry in the Survey_Master table with the SurveyID from step 3, a description for the survey, the name of the data class from step 2, and the name of the UI class from step 4.
    9. For each company that’s eligible for a survey, add a row to the Company_Survey table with that company’s CompanyID and the SurveyID from step 3.

    While this might seem to be a lot of work, remember that you only need to do it once for each survey.

    Putting it into practice

    For the purposes of this exercise, I designed a simple survey with the questions shown in Table 2. ******

    Table 2. The survey questions.Expand table

    No.QuestionComments
    1How did you hear about our company?C(3) options are:
    WOM: Word of mouth
    YP: Yellow Pages
    WWW: Web search
    ADT: TV advertisement
    ADR: Radio advertisement
    OTH: Other
    1aIf Other—where did you hear about us?C(20)
    Only available if OTH selected for question 1
    2Gender?I
    1: Male
    2: Female
    3Do you use SQL Server?L
    4Do you use FoxPro (Visual or otherwise)?L
    5Do you use Visual Basic (not VBA or VBS)?L

    Next, I created a subclass of surveybasedata called surveycustomerdata and added properties for each of the questions. The subclass is included in the Download file, but the properties added were: cSource, cSourceOther, nSex, lSQLServer, lFoxPro, and lVB. I also overrode the CreateCursor() method to create a cursor with a field of matching name and data type for each property.

    I assigned this new survey an ID of 1.

    The next step was to create a subclass of the surveybase GUI class. I called this subclass surveycustomer.

    I added controls to the subclassed form—a drop-down for the source, a text box for the other source description, an option group for the gender, and check boxes for each of the development tool questions. These controls were in addition to those provided by the base class—companyID, last update date/time, and comments, as well as the Save and Cancel buttons.

    Because the other source text box should only be available if the user chooses Other from the source drop-down, I added enable/disable code to the UpdateControls() method that checks the value of the drop-down and takes appropriate action.

    I set the value of the cDataObjectName property to “surveycustomerdata” so the correct data object is instantiated by the GUI class.

    I updated the survey_master table by adding a row with the values SurveyID = 1, Survey_Name = “Generic Customer Survey,” Data_Class = “surveycustomerdata,” UI_Class = “surveycustomer.”

    Finally, I added two new rows to the Company_Survey table, one each for CompanyIDs 1 and 2, both with SurveyID 1.

    To display the survey, I typed the following in the command window:

      
    

    Note that the second and third parameters of the CreateObject() call are passed to the Init() method of the GUI object. In this case, the 1 means that I want to load the survey data for CompanyID 1, and the .t. means that I want to open the form in edit mode (rather than just viewing the data). The result is shown in Figure 4.

    Answering the questions and clicking the Save button fires the form class’s SaveSurveyData() method, which in turn fires the data object’s SaveData() method. The XML generated and saved to the memo field is shown in Listing 4.

    Retrieving the data

    “But wait,” I hear you cry. And you’re right. Storing data in this format doesn’t make querying and retrieval a simple matter of running a SQL statement. The data is stored in a free-form memo field, and most of us have had experience with how much of a hassle it is to retrieve data from there. This is where the power of the XML format (and one of Visual FoxPro’s most useful commands) comes to the fore. It’s a simple matter to retrieve all of the data from the text field into a cursor, and once it’s in the cursor the whole might of the native data engine is available to you.

    The code in Listing 5 (included as ExtractData.PRG in the Download file) shows how simple it is to retrieve all of the data from the XML memo fields into a single usable cursor.

    ****

    Listing 5. Retrieving VFP data from the memo field quagmire.

      
    

    After checking that the appropriate class library is loaded, the extraction program instantiates a data object and connects to the back end using the data object’s connect string. It then retrieves a cursor containing all of the rows with answers to survey questions. Next it calls the data object’s CreateCursor() method, which generates a cursor with a column of the appropriate type and name for each data object property.

    Scanning through the list of answer text fields, the code then passes the XML for each set of answers to the data object’s LoadData() method. Remember when I said that the tcXML parameter of the LoadData() method would come in handy? Well, here it is. It means that there’s no requirement to go back to the back end to retrieve the answers for each company. We can just get them all into a cursor with one back-end hit and then use the local data engine to scan through them and pass the XML to the data object.

    Once the data object has been loaded up with the answers, it’s time to add a row to the results table and populate it with the date. Two simple but very powerful lines of code do this:

      
    

    GATHER NAME is a wonderful command. It makes the process so much simpler. The alternative would be to iterate through all of the properties of the object and do a REPLACE for each one with the corresponding field in the cursor. I haven’t benchmarked this, but I imagine that having a native command to do this results in significant efficiencies.

    After scanning through the entire list of answers, this code will leave you with a cursor called ResultSet, which has a row for every company and a column for every answer. From there, the reporting process is up to you.

    Making changes to a survey

    The last thing I want to mention is how much flexibility this approach gives you. Let’s say that in our example you want to add a new question about the respondent’s income range and another about the number of computers at their primary working location. Let’s also suppose that you discovered the 30 characters you’d allocated to the other source field was too small—40 would be better—and that your boss is no longer interested in the answer to whether people are using VB. The following is all you’d have to do:

    1. Add a property called cIncomeRange and another called nComputerCount to the surveycustomerdata class.
    2. Remove the lVB property from the same class.
    3. Update the surveycustomerdata::CreateCursor() method to include cIncomeRange C(3) and nComputerCount I. Remove lVB and change the length of the cSourceOther field from 30 to 40.
    4. Update the surveycustomer class to include new controls for the income range (probably a drop-down like the source drop-down) and the number of computers (probably a spinner or text box). Ensure that their control sources are set to the matching properties of the data object. Remove the VB check box.

    That’s it! No data changes are required either to capture or to retrieve the data. The next time a survey is opened that was completed using the old format, the default values will be used for the new properties, the VB property will be ignored, and the existing 30 characters will be used for the other source field. As soon as it’s saved, the data will be in the new format.

    Extra credit

    You can use the metadata stored in the survey_master table to build a list of the surveys to which a particular company is “subscribed.” You could present a list to the user, including the description of the survey and the data that was last completed for this company in a GUI. The UI_Class field would then allow you to instantiate an appropriate form for viewing or editing survey responses.

    It’s quite simple to change the back-end database used for this class. In fact, I developed the system using a SQL Server back end. All you need to do is change the cConnectString property of the surveydatabase class to one that’s appropriate for your back end of choice and then set up the tables with the structure shown in Figure 3 on that back end. That’s it—the conversion’s complete.

    Conclusion

    Using XML to store data in a memo field provides an extremely flexible architecture while allowing the structured retrieval of the data. While it’s not essential that XML be used (it could have just as well been a proprietary text or even binary format in the memo fields), the fact that XML is a standard for this type of work means that tools like Rick Strahl’s wwXML library make working with the format simple and quick. I encourage you to get comfortable with this powerful data exchange format.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the November 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    Subclassing Existing Applications 

    • Article
    • 06/30/2006

    This article may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. To maintain the flow of the article, we’ve left these URLs in the text, but disabled the links.

    Subclassing Existing Applications

    Richard David Hodder

    Most developers have a store of reusable code they rely on during development. Most (if not all) of our apps use or subclass things from this store. In this article, Richard David Hodder presents an approach for reusing application functionality across applications.

    You create subclasses to reuse existing functionality in a class and to extend/change its behavior. You can “subclass” an application to reuse existing functionality in the application and to extend/change its behavior. I use the term “subclassing” somewhat loosely here, but I think it conveys the right intent.

    Let’s say that I have an existing application “Oingo” and I wish to create a new application “Boingo” that’s based on Oingo. There are several possible reasons to subclass the Oingo application:

    • Add functionality: I want Boingo to have all of the functionality of Oingo plus some new features.
    • Substitute/override functionality: I want Boingo to have all of the functionality of Oingo with substitutions for some existing functionality (for example, an Import form that looks totally different).
    • Remove functionality: I want Boingo to have all of the functionality of Oingo with some existing functionality removed (for example, remove the Import option from the menu).

    The first approach that might come to mind would be to create a new project file for Boingo, within the Oingo application directory. This approach mixes code bases and leaves you at high risk for breaking Oingo while trying to extend behavior in Boingo.

    The most direct approach would be to create a new directory for Boingo, copy all of the files from the Oingo application into the new directory, make changes/add functionality, rebuild, test, and distribute, right? The problem with this approach is that the “connection” between Oingo and Boingo no longer exists: They no longer stem from the same code base. There are now two distinct code bases: When changes to Oingo are made, the changes must also be applied to Boingo to maintain the same functionality.

    In a perfect world, several things would happen:

    • The Boingo project would have its own directory.
    • The project file for Boingo would be pointing to the same code base that’s found in the Oingo project file. This would allow the changes to be made to Oingo and “ripple” to Boingo.
    • The project directory for Boingo should have markedly less code—only the code that implements the additions, substitutions, and removals of Oingo functionality.
    • Changes to the application layer (“a-layer”) code in Oingo would be inherited by Boingo.
    • Changes to the a-layer in Boingo wouldn’t be inherited by Oingo: Again I refer you to the subclass metaphor. Changes in subclasses don’t affect the superclass; there’s no “upward” inheritance.

    One of my favorite quotes is, “Wherever you go, there you are.” In a perfect world, you’d know the exact locations where functionality would need to be added, substituted, and removed before the originating application (Oingo in this example) is designed. This would allow you to do things like place hooks into and data-drive the application in order to control what’s in an application and how to extend it. Most times it’s not possible, and you may not know beforehand that the application needs to be “subclassed.” That’s why I included the word “existing” in the title of this article: You’ve already created the application. Now you want to make use of your existing work.

    The keys to subclassing an application

    The approach I’ll present later for subclassing an application relies on being able to “trick” VFP into using other functions and classes. I’ll present the general concepts first, and then I’ll demonstrate how I applied them in Codebook applications I’ve written.

    The keys to subclassing an application are:

    • Managing the program stack (SET PROCEDURE)
    • Managing the class stack (SET CLASSLIB)
    • Managing the pathing (SET PATH)
    • Copying the project file and massaging its contents
    • Copying supporting files

    ****

    Management of the program stack

    When you call a function, VFP goes through the list of PRGs in the SET PROCEDURE list until it finds the function and then executes it. It goes through the list in the order of the PRGs in the SET PROCEDURE list. If two functions with the same name exist in one or more of the PRGs, then VFP executes the first one it encounters. Most of us have made the mistake of accidentally creating two functions with the same name. It gets really fun (read: frustrating <g>) when you keep modifying the function that’s later in the stack, and then run the application and find that things still seem broken. It always happens at 3 a.m. when you’re tired and out of caffeine. Consider the following three programs (Test, Foo, and Bar):

    *-- TEST.PRG
    SET PROCEDURE TO FOO,BAR
    Hello()
    *-- FOO.PRG
    PROC Hello
    MESSAGEBOX("I'm broken")
    ENDPROC
    *-- BAR.PRG
    PROC Hello
    MESSAGEBOX("I'm fixed")
    ENDPROC
    
    

    When you run TEST.PRG, you’ll always get the message box saying “I’m broken,” no matter how many times you change the “I’m fixed” string in the Hello function in BAR.PRG. That’s because when walking through the list of PRGs in SET PROCEDURE, VFP finds the Hello function in FOO.PRG first. The same goes for instantiating classes stored in PRGs: The first class encountered in the SET PROCEDURE list is instantiated.

    You might be asking, “What’s that got to do with subclassing an existing app?” Consider the following situation: Oingo has a stock price importing form that calls a function named ImportStockQuotes, which retrieves stock quotes from a Web site and imports them into a database. You want Boingo to import stock quotes from a file on disk rather than from a Web site. To change just the ImportStockQuotes “behavior” in Boingo, add a PRG to the Boingo project (for example, BoingoFunctionOverrides.PRG) and in that PRG create a function called ImportStockQuotes and fill it with the code to import the quotes from a file.

    The only step left in order to override the ImportStockQuotes behavior is to make sure that Boingo loads BoingoFunctionOverrides.PRG into the SET PROCEDURE list earlier than Oingo’s ImportStockQuotes. If you want to change the behavior of a class called DataImporter stored in a PRG, add a PRG to the Boingo project (for example, BoingoClassOverrides.PRG). In that PRG, create a class called DataImporter and fill it with the code that performs the behavior you want that class to execute in Boingo. You can be surgically “precise” with what you change by using this approach.

    ****

    Management of the class stack

    Managing the class stack is very similar to managing the program stack. When you instantiate a class that exists in a VCX class library, VFP goes through the list of class libraries in the SET CLASSLIB list until it finds the class and then instantiates it. It goes through the list in the order of the class libraries in the SET CLASSLIB list. If two classes with the same name exist in one or more of the class libraries, then VFP instantiates the first one it encounters. There’s one important difference between managing the program and class stacks: The class stack can’t contain two class library files with the same name. For example, suppose you had two directories (Oingo and Boingo) and each had a class library called DeadMansParty.VCX. If you executed the following command:

    SET CLASSLIB TO ;
    OingoDeadMansParty, ;
    BoingoDeadMansParty
    
    

    you’d get the cryptic error “Alias name is already in use.” Obviously, behind the scenes VFP is opening the class libraries as tables, and you can’t have two tables with the same alias (DeadMansParty) open in the same workarea. You could get around this by using the ALIAS parameter of the SET CLASSLIB command:

      
    

    As with the program stack, the trick to subclassing an application is to make sure that the a-layer class libraries for the subclassed app (Boingo) are loaded into SET CLASSLIB earlier than the class libraries from the superclass app (Oingo).

    ****

    Management of the pathing

    Managing the path by using SET PATH can also be important. Codebook developers can test their applications without having to build executables by taking advantage of path settings. Boingo may rely on the setting of path to open a file that’s in the Oingo directory. ******

    Copying the project file and massaging its contents

    A few paragraphs ago I mentioned that it’s important to make sure that Oingo and Boingo are based on the same code base. What’s the quickest way to do that? Just copy the Oingo project file (PJX and PJT) into the Boingo directory, right? Close but no cigar. Now Boingo’s project thinks that its directory contains Oingo’s code: The pathing to the project items is wrong. The pathing needs to be adjusted so that the items in the Boingo project file point to the items in Oingo’s directory. Some care has to be taken with this because some items still should exist in the Boingo directory—supporting files, for example. ******

    Copying supporting files

    Some items in a project support a framework or application and are application-specific, and therefore copies should be made of them, rather than pointing to the superclass app’s files. Databases and tables are a good example of this. What good is it to point the Boingo project at Oingo’s data, when one of the things that may be changing from Oingo to Boingo is data structures? Also, for development environment purposes it’s better if Boingo has its own data structures, even if there are no changes. Other examples of supporting files are reports and INI files. Support files will differ based upon which framework(s) you develop with (for instance, Codebook, INTL, WebConnect, and so forth).

    Frameworks can make most if not all of the keys to subclassing an application simpler to achieve because usually they’ve been addressed in the framework. For example, as you’ll soon see, Codebook keeps a table of the programs and class libraries to load. By changing the framework slightly, these programs and classes can be loaded in a manner that supports the task of a-layer ordering of items in SET CLASSLIB and SET PROCEDURE.

    Subclassing a Codebook application

    Rather than trying to address all possible frameworks and libraries, I’m going to stick to territory that’s familiar for me: the Codebook framework. ******

    Management of the program and class stacks in Codebook

    Codebook applications build a list of the programs and class libraries used by the application by querying the contents of the project file. In a function named BuildMetaData in Setup.PRG, the project file is opened with the alias “_project” and then the following query is run:

    SELECT NAME, TYPE ;
    FROM _project    ;
    WHERE !DELETED() AND ;
    (TYPE = "V" OR ;
    TYPE = "P")   ;
    ORDER BY TYPE    ;
    INTO CURSOR cTemp
    
    

    Records with a type equal to “V” are class libraries (VCXs), and records with a type equal to “P” are programs (PRGs). The contents of this cursor are saved to a table called METADATA, which is built into Codebook executables. In another program named SetPath, the information in this cursor is looped through. All of the program records (type=”P”) are used to build a comma-delimited list of the programs in the project. The function then SETs PROCEDURE to this list of files. All of the class library records (type=”V”) are used to build a comma-delimited list of the class libraries in the project. The code then SETs CLASSLIB to this list of files.

    Although this list is organized by type, this doesn’t order the files so that the subclassed application’s a-layer will get loaded earlier. Then I came up with an idea. I had the project file opened as a table, and I was looking at the Name field of the PJX file. The Name field uses relative pathing to point to project items. Therefore, framework files all started with “..” (for example, “..common50libscapp.vcx”). Files that were in the a-layer, on the other hand, did not start with “..” because they were either in the project’s directory or a subdirectory of the project’s directory (for example, “progssolvetheworldsproblems.prg”).

    I decided to change the contents of MetaData.DBF and reorder the records so that names not beginning with “..” float to the top of the list. Here’s the modified query that I used:

      
    

    I created a new field (LAYER) that holds the first two characters of the name of the file. This field is only used for the ORDER BY of this query. The framework doesn’t use the field for anything. All non-a-layer code will have a LAYER equal to “..” and all a-layer code will not. Due to the fact that the period character “.” has a lower ASCII value than the alphabetic characters, it was necessary to order the list by descending LAYER so that all a-layer records would be at the top of the cursor. Being at the top of the cursor, they get loaded into the respective stacks first!

    ****

    Management of the pathing in Codebook

    The main reason for managing pathing in Codebook is to create a development environment that allows you to develop an application without constantly having to rebuild the executable. When subclassing an application, Codebook must know two things: first, whether the current application is a subclassed application (like Boingo), and second, if it is, where the superclass application (Oingo) resides so that it can adjust its paths to point at Oingo. To solve this, I create a #DEFINE called APPLICATION_SUPERCLASS_DIRECTORY that contains the superclass’s directory. This #DEFINE only exists if the current application is a subclass. Therefore I was able to use the #IFDEF directive to change the pathing in the SetPath function in Setup.PRG:

    #IFDEF APPLICATION_SUPERCLASS_DIRECTORY
    LOCAL lcAppSubClassDir
    lcAppSubClassDir = ".."+ ;
    APPLICATION_SUPERCLASS_DIRECTORY + ;
    IIF(RIGHTC(APPLICATION_SUPERCLASS_DIRECTORY,1)!= ;
    "","","")
    lcPath = lcPath+ ","+;
    lcAppSubClassDir+"PROGS, "+ ;
    lcAppSubClassDir+"FORMS, "+ ;
    lcAppSubClassDir+"LIBS, "+ ;
    lcAppSubClassDir+"GRAPHICS"
    #ENDIF
    
    

    #IFDEF will only execute its code if the #DEFINE exists (if the application is a subclass).

    ****

    Copying supporting files and the project file and massaging its contents in Codebook

    I created a simple tool called the Codebook Application Subclasser (see Figure 1).

    The form SUBCLASS.SCX is available in the accompanying Download file. I won’t show all of the code here, but once the superclass application directory and subclass application directory are chosen, the following steps are taken:

      
    

    Let’s look at the last four function calls in this code snippet.

    BuildIncludeFile—This routine creates the application include file for the subclass application (Boingo). It #INCLUDEs the application include file from the superclass application (Oingo). This is done so that #DEFINEs added to Oingo in the future will be “inherited” by Boingo. Boingo’s include file can be added to manually: #DEFINEs added to this file don’t affect Oingo (as I said before, inheritance doesn’t move upward).

    ModifyMainProgram—Main.PRG is the main program for Codebook applications. Main.PRG gets copied over from the superclass. ModifyMainProgram uses LLFF (low-level file functions) to add the equivalent of the following to the bottom of Main.PRG:

      
    

    This has no effect on the code, but it makes sure that the next time the Boingo project is built, the aappBoingo class library will be added to the Boingo project.

    ModifyStartCB—StartCB.PRG is a program that sets up the development environment (paths and so on) for an application. It isn’t built into the application; it merely sets up the environment. ModifyStartCB adds code to StartCB so that the superclass application’s paths are included.

    CreateApplicationObjectSubclass—Every application created with the Codebook framework has an application object stored in AAPP.VCX. The application object holds global information for the application. When subclassing an application, it may be necessary to add or change properties and functionality on the subclassed application’s application object. For example, Boingo might need to attach a timer object to the application object to remind the user to import stock prices (a feature not available in Oingo). Therefore, I create a subclass of the superclass app’s application object and place it in the LIBS directory of the Boingo project’s directory. Boingo-specific application object changes get made to this object. In order to avoid the class library naming collision problem mentioned earlier, I name the class library “AAPP<Subdirectory of CDBK50 To Create>” (for example, AAPPBoingo).

    When to subclass an application

    Just because cause you can subclass an application doesn’t mean that you should. I can think of two occasions when subclassing an application would be appropriate:

    If you sell a product and receive a lot of requests for “one-off” functionality.

    If products will be internationally distributed. I worked on products that were developed in the U.S., but with the foresight to make them ready for the international market by incorporating Steven Black’s INTL Toolkit (www.StevenBlack.com). As international versions of the product were developed, there was locale-specific functionality that needed to be incorporated. Spain required new reports, Italy needed enhancements to the import form, and so on.

    Lessons learned

    Having coding standards—particularly frameworks and standard directory structures and the like—made this process simpler: This is true for coding in general. I’m not suggesting that you use Codebook specifically (although four out of five VFP developers surveyed… <g>). Rather, I suggest that you pick (or create) standards and stick with them.

    Also, use of the NEWOBJECT() function could actually get in your way because it hard-codes the location of the class library of the class you wish to instantiate. I’ve never really been a fan of this function for that very reason. I prefer to let the environment figure it out (particularly if I need to refactor classes into new class libraries), but that’s just my own bias.

    To find out more about FoxTalk and Pinnacle Publishing, visit their website at http://www.pinpub.com/html/main.isx?sub=57

    Note: This is not a Microsoft Corporation website. Microsoft is not responsible for its content.

    This article is reproduced from the December 2001 issue of FoxTalk. Copyright 2001, by Pinnacle Publishing, Inc., unless otherwise noted. All rights are reserved. FoxTalk is an independently produced publication of Pinnacle Publishing, Inc. No part of this article may be used or reproduced in any fashion (except in brief quotations used in critical articles and reviews) without prior consent of Pinnacle Publishing, Inc. To contact Pinnacle Publishing, Inc., please call 1-800-493-4867 x4209.

    By Amjad Izhar
    Contact: amjad.izhar@gmail.com
    https://amjadizhar.blog