text:
What Will I Be Getting Inside This Course?
The Break 70 Plan is easy to follow and will keep you disciplined during practice to maximize your time so you get better quicker!
As you complete these step by step practice plans utilize our custom worksheets to track your results and see instant progress over the course of a few weeks.
Access All Of Our Video Courses + Video Lessons
We've launched several video courses covering the golf swing, chipping, and putting as well as a master library full of video lessons. Browse these training videos to learn about different areas of the golf game including our how to fix a slice video, golf swing sequence series, and more!
Here is an 8 Minute preview of the types of golf lessons you'll find inside the video courses…
12 Weeks of Practice Plans with Worksheets to Fill Out
We've created 3 different 12 week improvement programs because there are 3 major groups of golfers.
- Group 1 – Golfers attempting to break 90 consistently
- Group 2 – Golfers attempting to break 80 consistently
- Group 3 – Golfers attempting to reach par or below
Each program includes 12 weeks of practices that build off of each other each week getting more challenging. This ensures you are improving and keeping up with the program. We've included worksheets that go with each and every practice so that you can show up to the course with your workbook and fill out the practice sheets as you complete drills. Tracking your results will be vital to your improvement.
On-Course Worksheets to Track Improvement
Get access to our custom scorecard which has stat tracking for fairways hit, greens hit, scrambling conversions, putts per round, putts per green in regulation, and more! You'll know exactly how often you hit fairways and greens (60% or better is good) as well as detailed short game statistics. This will give you intel on what to work on more during your practice time.
Bonus Practice Drills
We also included 5 different PDF files to download that give you bonus drills to help you with the golf swing, putting, chipping, and your mental game. Use them to create your own custom routines based on the stats you're seeing out on the golf course from our custom scorecard.
An Educational Book on Short Game & Statistics Based Improvement
Explore 35+ pages of content that teaches you important lessons on short game as well as statistic based performance improvement. We've designed countless charts and diagrams to show you where you stack up against fellow golfers in your handicap range. You'll learn exactly what you need to achieve statistically in different categories of the golf game to lower your golf score to a level you've been striving for.
Is this Program Right for Me?
Does any of the follow sound familiar to you?
Practicing like crazy with little result. You're throwing a lot of time and money into your golf swing, equipment, balls, and training aids but seeing little to no improvement in your scores.
Unsure how to spend your practice time. You've got limited practice time each week and every time you go to the course you've got good intentions of working hard but end up leaving feeling unaccomplished.
Losing your motivation. You feel like you've tried every golf drill on Google, but haven't seen the results you were expecting or the improvement that allows you to break that next scoring barrier.
Frustrated by all the conflicting information. You're sick of wasting time trying to research how to fix your golf swing, improve your ball striking, and sink more putts. You keep hearing the same outdated, lame-sauce advice. You want something that will work NOW!
Did you raise your hand to any (or all) of the above? Good. You are SO in the right spot.
What Kind of Results Can I Expect?
I want you to take a moment and imagine a world where you could…
Dramatically improve your chipping skills in less than ONE week. Consistently strike quality chip shots that land on the green and roll close to the hole. No more missed opportunities to get up and down for par.
Sink more putts within 10 feet. Stop sweating those par saving putts from a few feet away from the hole. You've built a putting stroke that is your strongest weapon, helping you make more birdies, pars, and shoot lower scores.
Feel confident in your golf game. No more second guessing or feeling pressure standing over your golf shots. You know you have the skills to play well and the mental confidence to back it up.
Stand out above the competition. Your golf game becomes noticeable when playing with friends, getting you lots of new compliments and putting fear in your competitors.
Continually improve your golf skills without spending tons of money. You are actually able to see improvement on a weekly basis without spending loads of money on your game.
Feel excited to practice your golf game. When was the last time practicing golf was actually fun and didn't feel like a chore? Now you have exciting drills and games to look forward to completing, making you want to head to the course for practice!
Yep. Fo-Real.
Get this, bud — you can achieve ALL of this success by simply practicing more strategically.
Why You Should Join
These Practice Plans (Break 70, 80 and 90) are my step-by-step program and online community where I'll teach you my highly effective Golf Practice SYSTEM, so you can stop spinning on that hamster wheel and start improving your golf scores, fundamentally and QUICKLY.
Discover ALL the practice drills I've taught to over 400+ other Program students — practice plans that will dramatically improve your scoring, chipping, and putting fast.
This is the same system I used to break 80 in golf within my first few years of playing golf and eventually go on to win golf tournaments with under par scores.
And the best part? I'll show you how to track the RIGHT kind of statistics — Fairways in regulation, Greens in regulation, Scrambling, Putts per Round, Putts per GIR, and more.
We're not trying to practice blindly here. We want you to see progress and growth and the only way to do so is by having cold hard data to back it up!
*Amazing stat tracking worksheets included!
Final Words
Overall, this plan and all the accompanying bonuses will be like no other program out there. If you stick to the plan, read all the material, and apply everything you're learning to your practices, then I have no doubt you will be an improved golfer and shoot lower scores.
Following the 12 week plan alone will be great but I highly recommend consuming all of the bonuses we added into this 12 week program. Best of luck! You'll do great!


text:
Your search for WordPress helpdesk plugin ends here. ThriveDesk is complete support ticketing, live chat and knowledge base solution for WordPress powered website.
Help Desk Plugin For WordPress
ThriveDesk is the ultimate helpdesk and ticketing software for WordPress, offering a lightweight and fast assistant that attracts customers without slowing down your site. With personalized interactions, automated messages, and detailed analytics, it's the perfect solution for enhancing customer support.
We designed ThriveDesk helpdesk to protect users' privacy and align with the GDPR rules.
Win your customers over by using this incredibly fast and lightweight customer support tool.
Avoid slow page loading times and lag in message delivery and reception.
Check customer information, page browsing history, previous purchase history right from the agent dashboard. Manage refunds and serve customers on the go.
Now, ThriveDesk allows customers to communicate with support staff in their native language, making it an ideal multilingual customer service solution.
HelpDesk for WooCommerce
Your customers will love you for using ThriveDesk live chat with WooCommerce. Engage customers at the right time, prevent cart abandonment & manage WooCommerce store right inside ThriveDesk — No more switching between multiple tabs.
Introducing ChatGPT Integration within Helpdesk System
Now ThriveDesk is more powerful with ChatGPT integration directly with our helpdesk system. Now you can provide faster and more accurate responses to customer inquiries.
ChatGPT can assist support agents by providing suggested responses or templates for common inquiries. It can enhance the quality of support ticket responses to identify areas for improvement.
How can live chat increase your sales and conversion?
Live chat is a great tool for businesses to use because it can increase the conversion rate and search ranking. It doesn't matter how big or small you are, live chat is an inexpensive customer service tool that can make you feel more like a trusted provider of goods to the customer.
With ThriveDesk live chat plugin provides one-on-one conversations with your customers, which means that you can address their concerns efficiently and start closing more sales.
This will in turn increase your conversion rate and search ranking by reducing the number of people who are unhappy with their experience on your website.
💬 Live Chat Features
- Real Time visitor tracking
- Chatbots
- Proactive messaging
- Offline messaging
- Lead collection
- Automated replies from the knowledge base
- Contact forms
- Links
- File sharing
- Zoom and Google Meet integration
- Analytics & Insight
- Seamless integration with other CRM
- And much more…
Available on:
- IOS App
- Android App
Helpdesk & Support Ticket Plugin for WordPress
Manage all customer conversations through ThriveDesk's Shared Inbox (aka Ticket System). Shared Inbox is where all your tickets, live chat, and queries are directed, and the team collaborates to provide a better customer support experience.
ThriveDesk makes it easy for your team to manage emails through a single shared inbox.
🌟 Helpdesk Features
- Shared Inbox
- Workflow automation
- Team collaboration
- Merge conversation
- Assignments
- Collision Detection
- Tagging
- Canned replies
- Spam filtering
- Auto-responders
- Auto BCC
- Default Status Update
- Private notes
- Reply Undo
- Powerful Search
- Notifications
- Contact history
- Previous conversations
- Satisfaction survey
- Reporting
- And much more…
🤔 Why Shared Inbox?
A shared inbox enables you to manage customer support requests with a smaller team, providing a more efficient use of resources and reducing the cost of maintaining a larger support team.
Which means all customer interactions are in one place, making it easier for agents to manage, prioritize, and respond to requests. This helps reduce the risk of missing requests or duplicating efforts.
✅ Better conversation organization
✅ Automation of redundant tasks
✅ Better workflow management
✅ Easier performance-tracking
✅ Better collaboration
✅ Credible reporting
✅ Better integration
✅ Seamless customer experience
Reduce ticket inflow, avoid repetitive incident logs, facilitate self-service on the portal, and improve resolution times with a repository of articles that can help the customers find answers to their problems.
Knowledge Base is a self-service system that works perfectly with the Live Chat and Ticket system.
WooCommerce Integration
If you sell your products through WooCommerce, there is no better way to handle all your customer tickets seamlessly than with a ThriveDesk.
You can check the total number of orders, order details, shipping information right inside the ThriveDesk conversation page.
SureCart is an e-commerce platform that allows businesses to easily sell their products online. By integrating SureCart with ThriveDesk we give SureCart business owners the ability to streamline their customer service and support processes by managing their orders and customer information all in one place.
Now, As a SureCart business owner can access important customer information such as order history, shipping information, and payment details right within the ThriveDesk platform. By leveraging the power of both platforms, you can access important customer information, manage orders, and provide personalized support all in one place.
Freemius is a powerful platform that provides developers and businesses with a comprehensive set of tools for selling premium and freemium software, plugins, themes, templates, and SaaS. By Integrating Freemius with ThriveDesk, businesses can provide a better customer experience.
Now, you have all the necessary customer information readily available without switching between different systems or applications. Your support representatives can quickly respond to inquiries and provide personalized support. This saves time and reduces the likelihood of errors.
🎁 More Integrations
- WooCommerce
- Easy Digital Downloads
- Gravity Form
- Fluent CRM
- Fluent Form
- WPForms
- Contact Form 7
- Appsero
- Slack
- SureCart
- Freemius
- Custom Apps
📊 Advanced reporting
ThriveDesk is designed to be a simple-to-use, powerful reporting tool. Thrivedesk's Reporting tool offers a variety of metrics and reports that can help you make data-driven decisions to make sure you are serving your customers to the best of your abilities. It is a great tool for those who want to understand their progress and make changes accordingly.
📈 Reporting Features
- Conversations reporting
- Company reporting
- Happiness score
- Leaderboard
- Agent performance
- Much more…
The easiest way to install ThriveDesk is to search for it via your site's Dashboard.
Step-By-Step Instructions
- Go to the WordPress Dashboard «Add New Plugin» section.
- Search For «ThriveDesk».
- Install it by clicking the «Install Now» link.
- When the installation finishes, click «Activate Plugin.»
Who should use ThriveDesk?
ThriveDesk is perfect for Bootstrapped SaaS startups, eCommerce businesses, WordPress plugin & theme businesses, and everyone else. If you want to communicate with your customers and provide excellent customer service, you need to use ThriveDesk.
Do I need to have coding skills to use ThriveDesk?
Absolutely not. ThriveDesk provide the most user-friendly live chat and helpdesk plugin for WordPress.
How much does ThriveDesk cost?
ThriveDesk is free for 7 days, and we don't need your card details. Later on, you can extend your trial period and unlock new features by upgrading to premium plans.
Shared Inbox is where all your tickets, live chat, and queries are directed, and the team collaborates to provide a better customer support experience.
A shared inbox is a central location where multiple agents can access and respond to customer inquiries, requests, and support tickets. It is a collaborative tool that allows teams to manage customer support requests and interact with customers in real-time.
In a shared inbox, all customer conversations are visible to every agent, so each team member can see what has been discussed and what actions have been taken. This helps ensure that all customer inquiries are handled promptly and efficiently, without any duplication of effort or miscommunication.
Do I need to install any additional tools to use the live chat widget?
No. ThriveDesk is a fully-integrated WordPress live chat solution. You can start chatting right after you install the ThriveDesk WP plugin and create a free ThriveDesk account.
Can I customize Live Chat plugin
Absolutely. You can customize live chat colors, upload your logo to match your brand.
Can several support agents use the free chat at the same time?
Yes. You can also transfer conversations between operators. It means that operators (and an unlimited number of customers) can use the live chat at once for free.
Are you GDPR friendly?
Privacy is our utmost priority, and we designed ThriveDesk in a way that aligned with GDRP.
Contributors & Developers
"WordPress Helpdesk & Live Chat Plugin Powered by AI – ThriveDesk" is open source software. The following people have contributed to this plugin.
Contributors"WordPress Helpdesk & Live Chat Plugin Powered by AI – ThriveDesk" has been translated into 1 locale. Thank you to the translators for their contributions.
Translate "WordPress Helpdesk & Live Chat Plugin Powered by AI – ThriveDesk" into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
- Fix: WooCommerce product data missing issue
- Fix : FunnelKit namespace issue
- Update: Enhanced WooCommerce integration
- Update: Modal UI
- Fix : Search infinite loading
- Fix : knowledge warnings
- Feat: Connection process optimized for connecting WordPress site with Thrivedesk.
- Feat: Added knowledge base to enhance search functionality on portal page.
- Feat: Added dedicated portal page.
- Update: Reorganized dashboard with settings for better user experience.= 1.2.4 =
- Feat: Plugin is relocated to the main menu.
- Feat: Woocommerce custom order status support added.
- Assets Update
- Feat: Woocommerce custom order ID support added.
- Feat: Woocommerce AfterShip plugin support added.
- Fix: User data conflict issue fixed.
- Fix: Portal page caching issue fixed.
- Fix: API key verification state issue fixed(Stable).
- Update: Portal page UI improve with all major themes(10+).
- Fix: EDD order overview issue resolved.
- Update: WooCommerce shipping details checkbox warning handled.
- Fix: Portal access issue resolved.
- Update: New plans are added for WPPortal support.
- Fix: Token authentication 2.0
- Update: Warning messages
- Update: Error handling
- Add: Support tab to WooCommerce my account page
- Fix: Token verification issues
- Update: Routing update
= 1.1.0
– Update: Woocommerce Integration V2
- Fix: Revert pro plan
- Update: Starter plan support for Portal
- Update: New plan added for Portal
- Update: ThriveDesk plan list for Portal feature
- Add: Permission check to run migration script
- Update: Migration Script
- Fix: Legacy post types support for WPPostSync integration
- Updated ThriveDesk plan list
- Fixed portal feature availability issue
- Updated admin layout
- Added gravatar support for the conversation details page
- Fixed knowledge base search did not filter the results properly
- Fixed various style issues
- Fixed minor bugs
- Added translation file
- Added RTL support for conversations
- Added footer credit on conversations page
- Fixed WP footer overlapping issue on portal settings
- Fixed UTF-8 email parsing issue
- Fixed no way to deselect the assistant once selected
- Fixed an issue where conversation was not being fetched from the API
- Updated the no ticket message on the conversation page
- Added WP Post Sync option in the settings page
- Added caching to improve response times and overall performance
- Fixed an issue where the portal area was blank after successful verification
- Fixed a bug where knowledge base docs were not being searched using the selected search provider
- Fixed an issue where style and script files were being loaded on every page
- Fixed an issue with an undefined variable that was causing errors in the console
- Improved error handling for API calls to ensure that errors are properly handled and reported to the user
- Conversation details did not show properly
- Deployment image updated
- NEW WordPress portal
- Real-time knowledge base search added
- Improved UI with new features and enhancements
- Updated readme update workflow
- NEW Guest order sync
- Improved Customer identifier
- Improved Products details
- Improved and optimized shipping details= 0.9.8 =
- Stable release of version 0.9.8
- Updated ThriveDesk app url
- Improved security
- Improved performance
- Tested plugin with WordPress version 5.9
- Fixed swapped Autonami lists and tags info
- Added EDD customer info
- Fixed code formatting
- Fixed rest route warning issue
- Improved rest route api call
- Fixed database migration bug
- NEW Autonami integration
- NEW WooCommerce order status check functionality
- Improved FluentCrm integration
- Fixed WordPress Post Sync tab border style
- Fixed WordPress Post Sync image icon
- Fixed plugin version tag
- NEW WordPress Post Sync integration
- Improved API request security
- NEW FluentCRM integration
- Fixed Typo here and there
- Fixed ThriveDesk connection error
- Fixed link color overriding by plugin
- NEW plugin design
- NEW WooCommerce Integration
- NEW Added support for WooCommerce Software License plugin
- Fixed EDD issues
- Added support for EDD Software License
- Added plugin connect and disconnect status
- Added available integrations page
- Updated API request validation
- Improved API request & response security
- Initial release

subset: commoncrawl


text:
TL;DR: Uber was vulnerable to subdomain takeover on saostatic.uber.com via Amazon CloudFront CDN. Moreover, Uber's recently deployed Single Sign-On (SSO) system at auth.uber.com, which is based on shared cookies between all *.uber.com subdomains, was found vulnerable to session cookie theft by any compromised *.uber.com subdomain. Therefore, the impact of the subdomain takeover could be increased to Authentication Bypass of Uber's full SSO system, yielding access to all *.uber.com subdomains protected by it (e.g. vault.uber.com, partners.uber.com, riders.uber.com, etc). Uber resolved the subdomain takeover vulnerability and granted a $5.000 bounty for the two combined issues.
Web Security
Authentication bypass on Airbnb via OAuth tokens theft
TL;DR: Login CSRF in combination with an HTTP Referer header-based open redirect in Airbnb's OAuth login flow, could be abused to steal OAuth access tokens of all Airbnb identity providers and eventually authenticate as the victim on Airbnb's website and mobile application. This attack did not rely on a specific OAuth identity provider app configuration flaw (e.g. wildcards in whitelisted redirect_uri URLs), which made it generic for all Airbnb's identity providers (Facebook & Google at the time of reporting). Airbnb fixed both the login CSRF and open redirect issues and awarded a $5.000 bounty back in the summer of 2016.
Authentication bypass on Ubiquity's Single Sign-On via subdomain takeover
I publicly disclosed a vulnerability that I responsibly disclosed to Ubiquity via the HackerOne platform. It concerned a subdomain takeover issue via Amazon Cloudfront (ping.ubnt.com) in combination with shared session cookies between subdomains on *.ubnt.com, which ultimately lead to a complete Authentication Bypass of their SSO system (sso.ubnt.com). It can be found here.


text:
Why Do I Date Men Who Are Cheating On Their Girlfriends?
- Cheating, Jealousy and Cheating, Relationships
I have trust issues with men, and it can be very difficult to decipher when my concerns are legitimate or due to my own paranoia. I'm attractive enough to draw a considerable amount of male attention and have enough personality to keep them to develop what I believe to be serious relationships. But months later, I discover I've been wrong.
In my last relationship, I spent 3-4 nights a week at his house for months. I had a key to his apartment. I even met members of his family. And yet I STILL found out that he was engaged to another woman! And only because he'd forgotten to tuck away his anniversary card.
Being cheated on is bad enough but worse is consistently feeling you weren't good enough to be the only girlfriend, nor good enough to be the #1 girlfriend. I tend to give the benefit of the doubt. I don't spy on phone calls or snoop through drawers, but I'm starting to feel it's necessary.
And before you say you're not making yourself available to the right guys, I dated against type. I've been wined and dined by alpha jock types, I've done the light studio sessions will fellow artists. Hey, I've even done the really effeminate straight hair dresser (He had the nerve to ask me to reassure his lady that we had been using protection when we hadn't.) And yet I am still the back up girlfriend. HELP! —Sharon
Oh, Sharon.
Your problem is the simplest one I've ever encountered in 4 years of writing this blog.
Of COURSE you have trust issues. You choose un-trustworthy men!
You have AWFUL taste in men.
You have seemingly NO sense of how a good man acts.
You probably wouldn't recognize a man of character if he opened your car door.
Of COURSE you have trust issues. You choose un-trustworthy men!
So to properly address how to avoid this unseemly predicament in the future, it doesn't start with spying on phone calls or snooping through drawers.
It comes with looking for patterns in your past, since you're the only common denominator in your life and you've CHOSEN these men.
I'm no psychologist, but the obvious questions I have for you are these:
- Are your parents still together? Did your father leave you? Do you have any role models or paradigms of a committed relationship in your life?
- Have you always gone for emotionally unavailable men or did you start after a specific event in your life?
- How old are you and how long has this been going on? Everyone does stupid things in their 20's. By your mid-30's, your decision making should probably have improved.
- What is the common denominator between the "different" men you've chosen? Is it possible that you go for hot, charismatic, and unpredictable men in all forms? Because if you chase exciting, interesting men, it's little surprise that those same men will a) have that same effect on other women and b) have the ego to keep pursuing all those other women because he values excitement more than stability.
Which, I'm guessing, is not all that different than you, Sharon.
If I had your life experience and sample size, I, too, would come to the conclusion that men are liars and players and not to be trusted.
Instead of thinking you're breaking your patterns by choosing men with different careers, why don't you actually start choosing men based on ONE quality alone: integrity.
But if I were me (which, for the sake of today's post, I am), I'd point out to you that there are over 50 million married men in the United States, and, logically, most of them are not cheating on their wives.
So that just means that you need to work on your picker.
Instead of thinking you're breaking your patterns by choosing men with different careers, why don't you actually start choosing men based on ONE quality alone: integrity.
If you make integrity as important as you make attraction, you will quickly discover that you have no impulse whatsoever to break into your boyfriend's email.
Good luck.


text:
Rachmaninoff: Piano Concerto No. 3 in D Minor, Op. 30 / Scriabin: Etudes (Live) (Remastered) Lang Lang
Album info
Label: Craft Recordings
Genre: Classical
Subgenre: Concertos
Artist: Lang Lang
Composer: Sergei Rachmaninoff (1873-1934), Alexander Scriabin (1872–1915)
Album including Album cover
I`m sorry!
Dear HIGHRESAUDIO Visitor,
due to territorial constraints and also different releases dates in each country you currently can`t purchase this album. We are updating our release dates twice a week. So, please feel free to check from time-to-time, if the album is available for your country.
We suggest, that you bookmark the album and use our Short List function.
Thank you for your understanding and patience.
Yours sincerely, HIGHRESAUDIO
- Sergei Rachmaninoff (1873 - 1943): Piano Concerto No. 3 in D Minor, Op. 30:
- 1Rachmaninoff: Piano Concerto No. 3 in D Minor, Op. 30: I. Allegro ma non tanto (Live at the Proms)17:45
- 2Rachmaninoff: Piano Concerto No. 3 in D Minor, Op. 30: II. Intermezzo. Adagio (Live at the Proms)11:13
- 3Rachmaninoff: Piano Concerto No. 3 in D Minor, Op. 30: III. Finale. Alla breve (Live at the Proms)14:41
- Traditional: Liu Yang River (Encore) (Live at the Proms):
- 4Traditional: Liu Yang River (Encore) (Live at the Proms)03:45
- Alexander Scriabin (1872 - 1915): 3 Pieces, Op. 2:
- 5Scriabin: 3 Pieces, Op. 2: No. 1, Etude in C-Sharp Minor02:46
- 12 Etudes, Op. 8:
- 6Scriabin: 12 Etudes, Op. 8: No. 2 in F-Sharp Minor01:42
- 7Scriabin: 12 Etudes, Op. 8: No. 3 in B Minor01:50
- 8Scriabin: 12 Etudes, Op. 8: No. 8 in A-Flat Major03:48
- 9Scriabin: 12 Etudes, Op. 8: No. 10 in D-Flat Major01:54
- 10Scriabin: 12 Etudes, Op. 8: No. 11 in B-Flat Minor04:08
- 11Scriabin: 12 Etudes, Op. 8: No. 12 in D-Sharp Minor02:28
- 8 Etudes, Op. 42:
- 12Scriabin: 8 Etudes, Op. 42: No. 4 in F-Sharp Major02:44
- 13Scriabin: 8 Etudes, Op. 42: No. 3 in F-Sharp Major00:51
- 3 Etudes, Op. 65:
- 14Scriabin: 3 Etudes, Op. 65: No. 3 in G Major01:54
Info for Rachmaninoff: Piano Concerto No. 3 in D Minor, Op. 30 / Scriabin: Etudes (Live) (Remastered)
Recorded during live concert performances, Lang Lang's second Telarc release justifies all the positive buzz surrounding this young pianist's rapidly ascending international career. He brings plenty of finger power and long-lined drama to Rachmaninov's ubiquitous Third Concerto, yet takes plenty of time to let the lyrical, soaring tunes spin without an inkling of self-indulgence. He admirably adjusts the piano part to accompany when he doesn't bear the melodic burden, and he gets more expressive mileage from transitions than many pianists do. For once, the thicker, more difficult first movement cadenza doesn't sound unwieldy and elephantine. The piano is a little too prominent in the mix next to Temirkanov's sensitively detailed, flowing orchestral support. While Lang Lang has not fully internalized the quivering underbelly of Scriabin's passionate keyboard writing, his poised and secure readings of 10 Etudes still boast plenty of dynamism, idiomatic nuance, and roaring, Horowitz-like octaves. Watch this pianist! (Jed Distler)
Lang Lang, piano
St Petersburg Philharmonic Orchestra
Yuri Temirkanov, conductor
Digitally remastered
Lang Lang
He inspires millions with his open-hearted, emotive playing, whether it be in intimate recitals or on the grandest of stages – such as the 2014 World Cup concert in Rio, with Placido Domingo, to celebrate the final game; the 56th GRAMMY Award, where he performed with Metallica; the Opening Ceremony of the 2008 Beijing Olympics, where more than four billion people around the world viewed his performance; the Last Night of the Proms at London's Royal Albert Hall, or the Liszt 200th birthday concert with the Philadelphia Orchestra and Charles Dutoit which was broadcast live in more than 300 movie theaters around the United States and 200 cinemas across Europe (the first classical music cinemacast to be headlined by a solo artist). He forms enduring musical partnerships with the world's greatest artists, from conductors such as Daniel Barenboim, Gustavo Dudamel and Sir Simon Rattle, to artists from outside of classical music – among them dubstep dancer Marquese "nonstop" Scott, king of the crooners Julio Inglesias and jazz titan Herbie Hancock. He even builds relationships with corporations who will help him get classical music to ever-more people - thanks to his Sony ambassadorship, for instance, he brought Prokofiev's 7th Piano Sonata to the soundtrack of the multi-million- selling computer game Gran Turismo 5and 6! And he builds cultural bridges between East and West, frequently introducing Chinese music to Western audiences, and vice versa.
Yet he never forgets what first inspired, and continues to inspire him. Great artists, above all the great composers – Liszt, Chopin and the others – whose music he now delights in bringing to others. Even that famous old Tom and Jerry cartoon "The Cat Concerto" which introduced him, as a delighted child, to the music of Liszt – and that childlike excitement at the discovery of music now surely stays with him and propels him to what he calls "his second career", bringing music into the lives of children around the world, both through his work for the United Nations and through his own Lang Lang International Music Foundation. As he inspires, he is inspired. As he is inspired, he inspires others. It is this quality, perhaps, that led the New Yorker to call him "the world's ambassador of the keyboard".
It takes a special kind of dedication to come from a small Chinese town Shenyang , to travel to the big city as a small child and to win the attention of the country's finest music professors. And then to leave behind your home country altogether to join the world-famous Curtis Institute of Music Philadelphia, USA. Lang Lang achieved all of these early on – he started playing piano aged three, won the Shenyang Competition and gave his first public recital by the time he was five, entered Beijing's Central Music Conservatory aged nine, won first prize at the Tchaikovsky International Young Musicians' Competition and playing the complete Chopin Etudes at the Beijing Concert Hall at 13. He left for America, Curtis and the great piano teacher Gary Graffman and when his moment came, he was ready. That moment happened when, aged 17, he was called upon to make a dramatic last-minute substitution for the famous Andre Watts to perform in the "Gala Of The Century", playing a Tchaikovsky concerto with the Chicago Symphony Orchestra. It made him what journalists like to call an "overnight star" and the world's finest concert halls quickly beckoned.
Today, his resume reads like a bestseller (and indeed his biography, Journey of a Thousand Miles, has been published by Random House in eleven languages, and was released to critical acclaim – and as part of his commitment to the education of children, he released a version specifically for younger readers, entitled Playing with Flying Keys). He has been heralded as the "hottest artist on the classical music planet" by the New York Times, has played sold out concerts in every major city in the world and is the first Chinese pianist to be engaged by the Vienna Philharmonic, Berlin Philharmonic and the New York Philharmonic orchestras.
Time Magazine has recently included Lang Lang in the "Time 100", the magazine's annual list of the 100 Most Influential People in the World, naming him as a symbol of the youth of China, and its future. Lang Lang is the cultural ambassador of the cities of Shenzhen and Shenyang. In July 2012 he relayed the London Olympic torch in London just before the opening of the XXX Olympiad.
And if the Chinese passion for piano isn't solely due to him, he has played no small part as a role model to encourage more than 40 million Chinese children to learn to play the instrument – a phenomenon coined by The Today Show as 'the Lang Lang effect.' Steinway Pianos, for the first time in their century-and-a-half-long history, named a piano model after a single artist when they introduced "The Lang Lang Piano" to China. That piano, specially designed for early music education, is now on its fifth iteration.
And the child Lang Lang was and who, perhaps, is always with him, would surely have approved of the way he gives back to children around the world. His volunteer activities include mentoring rising young talented pianists, convening 100 piano students at a time in concert, performing for sick children in hospitals, delivering classical music recitals in underserved and remote communities, and donating his musical talents to raise awareness of other charitable causes. These charitable efforts have led to the launch of the Lang Lang International Music Foundation, with its goals of cultivating tomorrow's top pianists, championing music education at the forefront of technology, and building a young audience through live music experiences. The Financial Times described Lang Lang as "evangelical in his efforts to spread the popularity of classical music." And in May 2009, Lang Lang and three chosen young scholars from the foundation – aged between 6 and 10 years old – performed together on The Oprah Winfrey Show on 'Oprah's Search for the World's Most Smartest and Most Talented Kids.'
In 2011, Lang Lang Music World was launched, a multi-functioning arts complex located in Shenzhen and Chongqing, China, where children can go to receive piano education, participate in master classes and competitions, attend concerts and purchase educational products. Lang Lang himself continues to give master classes regularly throughout the world at the invitation of the most prestigious music institutions, including the Curtis Institute of Music, Juilliard School, Manhattan School of Music and Hanover Conservatory, as well as all the top conservatories in China where he holds honorary professorships. Elite universities such as Oxford, Harvard and Columbia have invited him to give talks.
Lang Lang enjoys reaching audiences of all sizes and few come bigger than that of the YouTube Symphony Orchestra, of which Lang Lang was the first official Ambassador – a role, created by YouTube and Google that combined two of his great loves, music and outreach through technology. More traditionally, tens of thousands of people have enjoyed Lang Lang's performances in open-air concerts in parks and venues around the globe, including Central Park in New York City, Hollywood Bowl in Los Angeles, Ravinia Festival in Chicago, Theaterplatz in Dresden and Derby Park in Hamburg. Lang Lang participated in the opening concert at Munich's Olympic Stadium with Mariss Jansons, marking the commencement of the World Cup Games. In celebratory concerts for the closing of 2008 Euro Cup finals, Lang Lang played with the Vienna Philharmonic under the baton of Zubin Mehta in front of Schönbrunn Palace. And he marked the New Year's Eve gala opening of the National Centre for the Performing Arts in Beijing with another great conductor, Seiji Ozawa.
In December 2007, Lang Lang was guest soloist at the Nobel Prize concert in Stockholm, an event attended by Nobel Laureates and members of the Royal Family. He performed as soloist in Oslo for the 2009 Nobel Peace Prize award ceremony and concert for President Barack Obama.
Lang Lang has made numerous TV appearances, including The Today Show, the Tonight Show with Jay Leno, Good Morning America, CBS Early Show, 60 Minutes, Wetten Dass and El Número Uno among many others. He has been featured on every major TV network and in news and lifestyle magazines worldwide, including such diverse publications as The New Yorker, Esquire, Vogue, The Times, Financial Times, GQ, Cosmopolitan, Die Welt, Reader's Digest and People.
As well as President Obama, Lang Lang has performed for numerous international dignitaries including the former Secretary-General of the United Nations Kofi Annan, Secretary-General Ban Ki-moon, George H. W. Bush, George W. Bush, William J. Clinton, Her Majesty Queen Elizabeth II, former President Hu Jin-Tao of China, President Horst Koehler of Germany, H.R.H. Prince Charles, former French President Nicolas Sarkozy, President Francois Hollande, Queen Beatrix and King Majesty King Willem-Alexander and Poland President Lech Kaczynski. Of many landmark events, he was honored to perform recently for President Barack Obama and former President Hu Jin-Tao at the White House State Dinner, as well as at the Diamond Jubilee celebratory concert for Queen Elizabeth II at Buckingham Palace.
Wherever he can, Lang Lang tries to give back. In 2013, he was designated by the Secretary General of the United Nations as a Messenger of Peace focusing on global education. Lang Lang has contributed and worked to raise funds and awareness for earthquake relief efforts in China and Haiti. These efforts included auctioning the red Steinway piano played during his 2008 New York Central Park concert, donating the net proceeds to the American Red Cross China Earthquake fund, and organizing a benefit concert at Carnegie Hall, donating the net proceeds to UNICEF's Earthquake Relief Fund in Haiti. He also currently serves on the Weill Music Institute Advisory Committee as part of Carnegie Hall's educational program and is the youngest member of Carnegie Hall's Artistic Advisory Board.
Honors include being added as one of the 250 Young Global Leaders picked by the World Economic Forum and receiving the 2010 Crystal Award in Davos. In May 2011, Lang Lang received an Honorary Doctorate of Music from His Royal Highness The Prince of Wales at the Royal College of Music, and received his second Honorary Doctorate in Musical Arts at the Manhattan School of Music in May 2012. In December 2011, he was honored the highest prize awarded by the Ministry of Culture of the People's Republic of China. More recently, he has received the highest German civilian honor, the Order of Merit of the Federal Republic of Germany, in recognition of his distinguished services to music and, in January 2013, he was presented with the Medal of the Order of Arts and Letters, by the French Minister of Culture.
He is one of the world's most prolific and highest-profile recording artists. Featured soloist on the Golden Globe® winning score for the film The Painted Veil, composed by Alexandre Desplat, he can also be heard on the soundtracks of The Banquet, composed by Tan Dun, and of My Week With Marilyn. All of his albums have entered the top classical charts as well as many pop charts around the globe. His album of the First and Fourth Beethoven Piano concertos with L'Orchestre de Paris and Maestro Christoph Eschenbach debuted at number one on the Classical Billboard Chart. Lang Lang also appeared on Billboard's New Artist chart at the highest-ever position for a classical artist. In 2007, he was nominated for a Grammy® Award, becoming the first Chinese artist to be nominated for Best Instrumental Soloist. He has recently recorded the movie soundtrack for the Japanese blockbuster film Nodame Cantabile, Chopin's 24 Etudes for "Project Chopin" (the largest project in honor of Chopin's bicentenary) ,"Nuit De Mai" with Placido Domingo and, of course, that opening sequence for Gran Turismo, the most successful videogame to date.
In February 2010, Lang Lang joined Sony Music Entertainment as an exclusive recording artist; his first album with Sony featured a live recording of his 2010 recital at Vienna's legendary Musikverein (including a segment filmed in 3D). His next CD, "Liszt, My Piano Hero" and DVD "Liszt, Now!" celebrated the 200th Anniversary of the great composer, while 2012 saw the release of "The Chopin Album". His latest released album is a recording with Nikolaus Harnoncourt and the Vienna Philharmonic Orchestra of all masterpieces of Wolfgang A. Mozart.
This album contains no booklet.


text:
Musings of a Software Developer
by Krishna Vangapandu
Wednesday, June 11, 2014
Friday, January 03, 2014
Few handy things to know in Go Library (Command line arguments, Reflection, Setting Bits, Hash functions)
Command line arguments in Go
go run cla.go KrishnaOr if you have an executable obtained from go build, you can run it as
./cla KrishnaShown below is an example go snippet that accesses the first argument passed & prints it.
package main import ( "fmt" "flag" ) func main() { //Without the call to Parse(), arguments may not be accessed flag.Parse() fmt.Printf("%s\n",flag.Arg(0)) }Notice that you will have to invoke the call to flag.Parse() without which you will not be able to access the arguments.
Reflection support in Go
So what is the type returned by flag.Arg(0) ? We will start from there and go use some functions.
package main import ( "fmt" //regular format package "flag" //package from command line arguments "reflect" //package for reflection ) func main() { //Without the call to Parse(), arguments may not be accessed flag.Parse() fmt.Printf("%s\n",flag.Arg(0)) passed := flag.Arg(0) //TypeOf actually returns a Type type fmt.Println("typeof : ",reflect.TypeOf(passed)) //ValueOf actually returns a Value fmt.Println("valueof : ",reflect.ValueOf(passed)) //Example functions from the Value type fmt.Println("type: ",reflect.ValueOf(passed).Type()) fmt.Println("kind: ", reflect.ValueOf(passed).Kind()) fmt.Println("interface:", reflect.ValueOf(passed).Interface()) }
Big Integer & Set Bits
package main import ( "fmt" "math/big"
"unsafe" ) func main() { //create a new big integer filter := big.NewInt(0) fmt.Println("filter value: ",filter) //accessing the sizeof from unsafe package fmt.Println("size of : ",unsafe.Sizeof(filter)) //example of how to cast uintptr to int filter.SetBit(filter,int(unsafe.Sizeof(filter)*8)-1,1) fmt.Println("filter after setbit last to 1 : ",filter) }
The above example shows a few things:
- Creating an instance of big.Int using the NewInt() call.
- Accessing the size of the big.Int using unsafe package exported SizeOf() function
- SizeOf() returns uintptr and we convert that to integer - that is a good example of casting
- How to set bit on the big.Int using SetBit
Working with Hash functions
- how to convert a string to a byte array
- how to use FNV Hash from the standard Go library
package main import ( "fmt" "hash/fnv" ) func main() { //Create a hash fnv function hash := fnv.New32() name := "Krishna" //converting string to byte array namebytes := []byte(name) fmt.Println("hash reset : ",hash.Sum32()) hash.Write(namebytes) fmt.Println("hash of Krishna : ",hash.Sum32()) hash.Reset() //resets the hash fmt.Println("hash reset : ",hash.Sum32()) //write again hash.Write(namebytes) fmt.Println("hash of Krishna : ", hash.Sum32()) }Hash libraries in the Go "hash" package implements the Hash interface. The implementations in the standard Go library as of this time are adler32, crc32, crc64, fnv-1/fnv-1a. The above example creates an instance of FNV hash, writes a byte array to it and then gets the value through Sum32() call. You can "forget" what is written to it by Reset() function which will allow you to reuse the hash instance.
I am newly learning Go and along the way sharing some things that I learnt. If you know of a better way to accomplish what I have shared here, please feel free to comment.
Wednesday, January 01, 2014
Working with "Packages" in Go language
The specification states that all source files for a package be stored in the same directory.
You can import a package as shown below.
import "fmt"
In this case, the Printf method may be accessed as fmt.Printf(). All other identifiers exported by the package is also accessible as fmt.XXXX().
You can also do the following.
import f "fmt"In this case, the qualifier is "f" instead of the default "fmt". So you access as "f.Printf()".
One other way is the following.
import . "fmt"In this case, you dont need a qualifier for the exported identifiers from the fmt package. You may also use the blank identifier (underscore : _) as the qualifier name for cases where you wish the initialize the package but not necessarily import its exported identifiers.
Source files of a package have an init() function. See below for more details.
The previous example of a simple Web Server is now split into two files
//GoWebServer.go package main import f "fmt" //init() is a special function that gets initialized. func init(){ f.Printf ("Package Initialized\n") } func main() { f.Printf("Web Server will be started at port 8080\n") runWebServer() }
//WebServerHelper.go package main import ( . "fmt" "io" web "net/http" ) func init(){ Printf("Initializing WebServerHelper.go \n") } func runWebServer(){ rootHandler := web.HandlerFunc(func(w web.ResponseWriter, r *web.Request) { io.WriteString(w, "Hi there, I love "+r.URL.Path) }) srv := web.Server{ Handler: rootHandler, Addr: ":8080", } srv.ListenAndServe() }Few things that I learnt when trying to make this work.
- You need to specify all the files required for your main program to build properly. So you may
go buildOr you may run
go build *.go- You can also specify output to be generated as
go build -o output/gowebserverOr be more explicit
go build -o output/gowebserver *.go- Go complier does not like if a package is imported but not used. This is good. I cannot tell how annoying i find C# using statements that are just there but no one really uses them.
Package Initialized Initializing WebServerHelper.go Web Server will be started at port 8080
Such init() functions may be defined multiple times even in the same source file & the execution order is unspecified/undefined. So we should not write our initialization logic based or the execution order.
And init() cannot be called by anyone else. Packages are initialized only once. So if you import packages P & Q but Q also imports P, then P is initialized only once.
Package initialization is comprised of variable initialization (package level variables are all assigned initial values) & invocation of init() functions - performed one package at a time in a single go routine.
See below for a basic program that indicates the above said sequence - variable initialization followed by init() method.
package main import "fmt" //x := 2000 var x int = 2000 func init(){ var y int = x fmt.Printf("X value is %d\n",y) } func main(){ }
x is a global variable (which by the way cannot use the shortcut notation that is commented) that is initialized to 2000 and that is what gets printed when the program is executed.
Local Packages in Go
When you sayimport "fmt"the package "fmt" is looked for in the standard Go tree. Then it is looked for in "$GOPATH/pkg" directory where $GOPATH is the environment variable set to some directory on your machine. Commands such as "go get" also looks for this directory. You can read more about it here (look for Go path). So what about local packages - the one you do not want to put in GOPATH but leave it in the current directory for your application? To make this work, I renamed the package declaration (which originally was main) for the WebServerHelper.go as
package wsThen I created a folder with the same name as the package & placed the .go file in the folder. Then my import statements on the GoWebServer.go (the main file) has changed to
import ( f "fmt" ws "./ws" )Notice the "./ws" declaration. So the import "XXX" statement says look for "XXX" file path. So without "./" it was looking in standard GO tree, then it looks at GOPATH. If there was a "./", it was just looking at the local directory. You may also give absolute paths. Also you don't need to build this directory specially. Just have your main file compile and you are good.
One other things that I had to change in the code to make the application work as before.
- In packages, if your function is to be exported, then it should start with upper case. In general, a field or a function or other identifiers within a package that starts with upper case letter are exported.
So if you are trying to make the previous code run (after the directory changes as described above), you will get the following
./GoWebServer.go:15: cannot refer to unexported name ws.runWebServer
./GoWebServer.go:15: undefined: ws.runWebServer
That's it for now!
Monday, December 30, 2013
Writing some Go! code
package main import "fmt" func main(){ messageToPrint := "Welcome to Go!" fmt.Printf(messageToPrint + "\n") }
Now to run this, you can do one of the following :
go run HelloWorld.goOR
go build HelloWorld.goIn the first case, "go run" compiles the program and runs it. It does not create an executable as such. (It could be creating a temporary executable somewhere.) The second command actually builds an executable which you can run. Go also has a tool called "gofmt" which you can run directly as gofmt or can run as
go fmt HelloWorld.go. The formatting tool formats your source code so that it matches the Go-defined formatting. This is a good thing as each one of us need not invent our own coding conventions. Gofmt can also be used to perform some code refactoring. In order to perform a rename variable, the following command does the trick.
gofmt -l -w -r 'messageToPrint -> mesg' ./HelloWorld.goThe above command would rename the messageToPrint variable as mesg. In general, you pass 'pattern -> replaceWith' style of commands when using the -r option. More information on what gofmt -r can be used for is available in this presentation
Writing a Web Server in Go!
The following code snippet shows a Web Server that is written in Go! and also shows how to write anonymous functions in Go!
package main import ( "fmt" "net/http" ) func main() { fmt.Printf("Web Server will be started at port 8080\n") //See below for anonymous function http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path) }) http.ListenAndServe(":8080", nil) }
Now a better way (in my opinion) to write the same code as above is shown below.
package main import ( "fmt" "net/http" ) func main() { fmt.Printf("Web Server will be started at port 8080\n") rootHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path) }) srv := http.Server{ Handler: rootHandler, Addr: ":8080", } srv.ListenAndServe() }In this example, we are actually creating an instance of a Http Server as opposed to the previous example where the http global helper methods were used to start the Http Web Service.
I was just curious to see how well this naive web service performs. Using apache bench, when I run 10000 requests at concurrency level of 100-700, the sample (stupid) program can serve around 5000 requests/second on my age old laptop. Just for kicks, the server in Go is atleast 5 times faster for each request as compared to the nodejs http server.
Back to Go! ..
- Package has to be "main" for your main program. Otherwise, it does not work.
- Passing -x flag to your helper commands such as "go run", "go fmt" or "go build" will display the complete output and the commands internally executed.
- The "go build" has all compiler optimizations enabled.
Tuesday, November 13, 2012
Hello World! with Scala Web Application using Play 2.0 and Scalate
In this post, we will look at how to make a hello-world web application in scala using the Play 2.0 Web Framework and change the template engine to work with Scalate. We assume your machine is all set up with Java and Scala configured.
Step 1 : DOWNLOAD AND CONFIGURE Play 2.0
Download the Play Framework 2.0 from http://download.playframework.org/releases/play-2.0.4.zip. Then extract the zip file to some location. I put mine at C:\Development\tools\play-2.0.4\. It is usually a good idea to leave the version number intact so as to easily know what version of any tool you are currently having on your machine.
The configuration portion is pretty simple – Update your PATH environment variable to include the root directory of the play-2.0.4 folder which has the "play.bat" (I am running windows).
To verify, launch your command line or powershell and type the command "play". You should see something like shown below.
Step 2 : CREATE A NEW PLAY 2.0 WEB APPLICATION
Using command line (change directory – cd), go to a folder where you wish to place your application. Run the following command
play new helloworld-scalate
Here helloworld-scalate will be my application name.
Then from the command line go into the "helloworld-scalate" folder. And then run the following command.
play run
The first time you run, it takes a few seconds to initialize the project and upon success, you will see on-screen instructions that the application is hosted at 9000 port on localhost.
Verify by opening your browser and loading http://localhost:9000
You should see a welcome page.
Step 3 : INTEGRATING SCALATE INT YOUR APPLICATION
I found the proper instructions to do this here. But I will repeat them again.
Go to helloworld-scalate\project\Build.scala
3.a Add the following lines to appDependencies.
"org.fusesource.scalate" % "scalate-core" % "1.5.3"
What did we do? What we are doing is to add a dependency on scalate-core in an SBT friendly style. Play 2.0 takes care of fetching this dependency through its repositories which is listed at helloworld-scalate\project\plugins.sbt
To verify if things are fine, go back to command line and run the command
play run
You should see that SBT updates the dependencies. Just verify if your application can still be browsed from localhost:9000.
3.b Add ScalaIntegration.scala to helloworld-scalate\app\lib
You will need to create a folder "lib" inside helloworld-scalate\app folder. And then from the URL given below copy the content into a new file – ScalaIntegration.scala
This does the necessary bootstrapping such that you can now use scalate in the current project.
Run the "play run" command again and reload the page at localhost:9000 to make sure you haven't made a mistake.
Step 4 : UPDATE VIEWS & ACTION WITH TEMPLATE OF YOUR CHOICE
Scalate supports multiple template engines like Jade, Mustache, Scaml. The documentation indicates that Scaml gives the best performance given the strongly typed nature. But I might have misread the docs so read and check yourself.
To do this, rename your files inside "helloworld-scalate\app\views" folder such that extension is changed from .scala.html to .scaml. Note that you will see two files – the layout file (main) and the view file (index).
In the main.scaml, add the following code.
-@ var body: String
-@ var title: String = "Page"
%title= title
!= body
In the index.scaml, add the following code.
-@ var message: String = "Page"
/Layout template file given here
-attributes("layout") = "main.scaml"
%h1= message
Notice that in the index.scaml, we specified that we want to apply the main.scaml layout using the attributes("layout") declaration.
You also need to change the application controller which is inside the helloworld-scala\app\controllers\application.scala
The Application controller has an action called "index" which is the one that gets executed when you were loading the browser. We need to change this action such that it renders using Scalate instead of the default one.
package controllers
import play.api._
import play.api.mvc._
object Application extends Controller {
def index = Action {
//Ok(views.html.index("Your new application is ready."))
Ok(Scalate("index.scaml").render('message -> "Hello World"))
As you can see in the index action, I commented the existing line added this one line.
Ok(Scalate("index.scaml").render('message-> "Hello World"))
Please pay attention to the ' in front of the title. Here the 'message is a symbol literal. You can read more about them here.
Now run the "play run" command again and you should see plain html page that prints "Hello World".
I hope this step-by-step helped you get started with a new play 2.0 web application in Scala and also made you familiar with integrating the scalate engine. Note that the original url which I mentioned earlier has the same steps but step 4 where default Scalate template type is specified in the <application folder>\conf\application.conf is not performed. I skipped this step and it doesn't appear that it will cause any problems. But again, after reading this tutorial, if you are a beginner, then you and I are at the same level so please feel free to explore more and learn.
Monday, November 05, 2012
Useless experiment with Asynchronous Procedure Calls from C#
While Hurricane Sandy hit the East Coast and gave me a full week of vacation without electricity and internet, I gathered enough motivation to read through the very good book – concurrent programming on Windows by Joe Duffy. So here, I came across the Asynchronous Procedure Calls and what they mean. So this post is just a journal about me trying to do something clever (actually stupid) and sharing my madness with others.
From what I learnt, an asynchronous procedure call (APC) is just a procedure that you can queue and request the OS that this procedure be performed on a particular thread. But that particular thread may be executing something right? So the question is when will the APC be executed? The answer for that is "it will be executed on the thread when it enters an 'alertable wait' state". So what is an alertable wait?
Consider the code below.
void IExecuteOnAThread(){
In the above snippet, the thread is actually waiting on the syncLock. When some other thread that makes the conditionIsNotMet as false and does a Pulse() on the syncLock, this current thread shall wake up and proceed with its execution.
Now back to "alertable wait" –> If a thread enters an alertable wait, then it can wake up properly (like in the case above) or can wake up for some other reason. This is how APC gets executed. When an APC gets queued on a thread, the OS will execute this APC the moment it finds that thread in an "alertable wait".
So while I think about this concept, it stuck to me (given that I am not that smart) to run a simple experiment. Usually, we queue work items into ThreadPool to get executed. Now the execution can happen in parallel so there is no order guarantee. In some cases, I would like to execute some asynchronous operations "in-order"; as queued; in the background (for whatever reason). In these cases, we typically use some kind of "executor" classes where a queue is almost always involved and some thread/threads wait for the work to be queued and execute them one by one – classic Producer/Consumer style.
So what I wanted to try was to take advantage of APC and get away from not having to write any code to implement executors.
- I would simply create an "Executor" which has one thread which is always in an alertable wait state (Note that CLR takes care of making sure the Waits are resumed properly in case of any spurious wake-ups)
- The OS will take care of executing my operations one-by-one.
Note: For those who cannot wait till the end, do not do this – it is not worth it. I am just doing it because Sandy hit my head pretty hard.
public class StupidExecutor
delegate void ApcProc(UIntPtr dwParam);
static extern uint QueueUserAPC(ApcProc pfnApc, IntPtr hThread, UIntPtr dwData);
static extern IntPtr GetCurrentThread();
private readonly AutoResetEvent _waiter = new AutoResetEvent(false);
private IntPtr _threadId = IntPtr.Zero;
public StupidExecutor()
new Thread(WaitForApc).Start(null);
public void Stop()
private void WaitForApc(object none)
_threadId = GetCurrentThread();
public void QueueWork(Action action)
//while (Thread.VolatileRead(ref _threadId) == IntPtr.Zero)
// Thread.Sleep(0);
var localAction = action;
ApcProc apcProc = ((z) => localAction());
QueueUserAPC(apcProc, _threadId, UIntPtr.Zero);
When the StupidExecutor gets created, a thread is launched which when started waits for a signal on a Auto Reset Event. This will make the thread wait because it is non-signalled and will remain so until Stop is executed on the executor. The executor has one method "QueueWork" which takes a delegate.
So the usage of the stupid executor is as shown:
static void Main(string[] args)
var executor = new StupidExecutor();
double[] avg = {0.0};
int size = 1000;
for (int j = 0; j < size; j++)
var queued = DateTime.UtcNow;
executor.QueueWork(() => avg[0] += (DateTime.UtcNow - queued).TotalMilliseconds);
Console.WriteLine("Average Latency : "+avg[0]/size);
So the intention was to measure the latency (again not really the most efficient way). And I see an average latency of around 2 ms. So this must be a great way! Not really! First of all, for a lot of reasons like state corruption among other things this should not be done. Moreover, you are passing managed delegates to native code. So GC can always kick in. So to prove it, I am changing the sample size from 1000 to 100000.
Firstly, it wouldn't work and you will be greeted with a nice dialog.
So run it in debug mode and you will get a nice little MDA called "CallbackOnCollectedDelegate" shall be raised. This simply says that the delegate you passed to native code is GC'd already.
Or even this:
So the experiment which was doomed to fail did fail. Long story short – don't mess with your threads.
Sunday, October 28, 2012
A 5 min survey
Monday, December 12, 2011
Real World Example : Simple Publish/Subscribe Pattern with Reactive Extensions
Shown below is a requirement.
Let me explain a little about what I want to achieve. I have an entity called "Frequent" which implements INotifyPropertyChanged interface. So I can subscribe to the change notification and then upon firing the event, I simply increment a counter. Now, my requirement is that the PropertyChanged can fire way too quickly as simulated in the for-loop. So in UI applications, it doesn't make sense for me to fire property changed events that frequently as in a real world intensive WPF application, this can become your biggest bottleneck (among several others things).
So my requirement is that, within 1 second, I would like to receive only 1 change notification per property, if it has changed indeed. The simple implementation for this would be to do something like pushing the properties that have changed into a queue and process the queue once a second and then raise change notification event. This can be done very easily but then it can be a little tedious job for such a requirement to restrict an event from firing more than X times a second.
So I was looking at the Reactive Extensions (Rx Framework) and it occurred to me that it should support Observer pattern out of the box. So I started playing with it but hit a road block immediately. There are numerous resources that shows how to generate observables from Timers, Time Intervals, Enumerables, etc but what I want to is to take advantage of extension methods supported by Rx Framework on IObserver such as Throttle(), Buffer(), Window(), etc on a simple Pub-Sub system. May be I did not look hard enough but I could not find a simple example. So I thought it would be helpful for rest of the people like me if I made a blog post.
In my implementation, the Frequent object is by itself a Publisher and a Subscriber. In Rx terms – IObservable and IObserver. Instead of implementing these interfaces, I want to have some observable of strings where I will publish a property that has changed and the subscriber on the observable would receive it. So for that purpose of simple message passing between Observers and Observables, you can use a Subject<T>. There are other variants like ReplaySubject<T>, BehaviorSubject<T>, AsyncSubject<T>, etc. but that is out of scope of this post. I publish on Subject<T> and then the subscribers who subscribed earlier to it would be notified of these messages.
Shown below is a the Frequent class implementation.
Take a minute or two to go through the simple class, it is self explanatory. All I am doing is that when a property changes, instead of firing it immediately, I simply notify my throttler about the property that has changed. The throttler's responsibility is to determine when to notify the subscribers about this change. Shown below is the implementation.
You can read my comments that I wrote out of frustrations. All I do in this simple façade is to wrap an Observable –> Subject<string> and buffer the messages received for 1/2 second and then get unique messages from the buffer and publish it to the subscribers. This is all done in the constructor. The other methods are simply my take on making things simple for the consumer of this class.
Rx is complex and powerful but in my opinion it has a very steep learning curve. But it surely did save a good few days of implementation for my team. Again, I am very new to Rx, so if you have some better ways to do it, then please let me know.
Friday, December 09, 2011
Hannspad Hannspree SN10T2 – Rooting, Android Market and Some Crazy stuff
Recently the Android Tablet bug bit me which led me to buy Hannspad Hannspree SN10T2 from AliExpress.com. The order was made on the day of Thanksgiving and I received the tablet within two weeks. The whole goal was to get a cheap tablet on which I can try installing custom ROM, may be try and develop some applications. But turns out it is not that simple. See the Slatedriod.com forums has custom ROM but for SN10T1 model but not SN10T2 model – which runs on two different processors. So all the cool stuff I read about that people do with SN10T1 is not applicable for SN10T2 – example being booting the tablet in recovery mode. There are not hard volume buttons that lets me boot into recovery console. I tried all different combinations instead of missing Volume + button but the recovery key sequence remains unknown.
Connecting the Hannspad Tablet to Windows 7 x64
Hooking up the USB cable to the Windows 7 machine doesn't really install the drivers. You can still be able to copy files around once you enable the USB File Transfer on the tablet. If you are new like me, just drag the notifications bar on top of the tablet and the instructions then are clear enough for you to know what to do. So first time you hook up the tablet, you get the message saying OMAP-3/4 driver is not found. Don't even fight it, there is a really simple way to install the driver for the tablet.
- Download Super One Click from Shortfuse.org. The direct link to what I am using is here. It is version 2.3.1.
- Extract the zip file to some place you have your portable applications. I put it in temp but now I have a problem deleting the folder because driver was installed from this location??
- Launch SuperOneClick.exe and then click on Advanced Tab.
- Click on Check Driver.
- Then say OK for installation of the driver.
- Accept Windows warning about unsigned driver and move on.
What this driver lets you do is to let ADB (Android Debug Bridge or visualize like a remote shell access for your tablet unix system) identify that this device is hooked up and running.
Rooting the SN10T2 (may work for other tablets too!)
If you search for information on how to root the SN10T2, the first thing you see is the article by Sir Shagsalot (). It has precisely what you need to do in order to enable Super User access for the programs running on your Android Tablet. Since the information is not so eye-soothing, I will try to replicate the information. But be aware
- The information here is from the article I mentioned above plus my experience struggling with the Tablet.
- I am not an Android Expert – I am just a software developer who writes software for a living mostly on Windows Platform.
- Don't blame me for any physical or mental or financial pain that may cause as a result of following this information.
- Rooting implies the warranty is void. You cannot bitch about your tablet to your vendor anymore. Not my problem again
Option 1 : Using the same SuperOneClick
If you followed the previous steps, you can use SuperOneClick to Root your device.
Option 2 : Using z4Root
- Download the z4root.apk and place it in your SD Card on the tablet.
- On the tablet, go to Menu->Settings->Application Settings and check the option for Unknown Sources.
- Now go to Home->Applications->ES File Explorer.
- Navigate to the z4root.apk wherever you copied it.
- Install the APK file.
- Then open the z4root application.
- You will see two options –> Temporary Root or Permanent Root. If your application is already rooted, you will see the option to Unroot.
- I selected Permanent Root.
- Then wait until you see "Rebooting..". If the tablet doesn't reboot in say 10 minutes, I would not bother to wait. Just restart the tablet manually. It is fine!
The Android SDK Tools
Basically, rooting gives you Super user access and lets you access the shell from ADB console. The super one click application distributes the ADB console application if you poke inside the installation folder.
Anyway for you to officially get the ADB application, you can download the Android SDK from here.
- Download the Android SDK.
- Download the Java Development Kit, if you don't have it already. You need JDK not JRE.
- Install JDK. Install Android SDK.
- Now in the Android folder (C:\Program Files(x86)\Android\android_sdk\), launch the SDK Manager application. See image below.
- You need to check "Android SDK Tools" and then click "Install Packages".
- Once done, you will find a folder called "platform-tools".
Some fun with ADB.
- Open command prompt and assuming platform-tools is in your PATH.
(Of course, the table is connected to the machine, USB Debugging enabled on the tablet).
- Listing all the devices – adb devices
- Opening the Unix Shell for your tablet – adb shell
- Copying files from your PC to the device
- For SD Card, you don't need to mount as it is already mounted for "Read-Write". Just run the command -
- adb push c:\myfiles\superdocument.pdf /sdcard/
- For copying to /system/app folder, which you may have to do for manual installation of Google Apps and Market
- Go to the shell of tablet using "adb shell". Now inside the shell,
- Mount the /system using the command
- mount -o remount,rw /dev/block/mmcblk0p5 /system
- Copy the files you want to push to /system/app, using
- push c:\files\superapp.apk /system/app/
- Unmount the /system using the command
- mount -o remount,ro /dev/block/mmcblk0p5 /system
- Make sure you unmount once you are done.
- Reboot the tablet from Windows – adb reboot
- Copying files from your tablet to the PC – adb pull \sdcard\super.pdf c:\temp\goodbook.pdf
Installing the Android Market on the SN10T2
You can follow the original instructions from top to bottom that Sir ShagsALot wrote here. I will just use the ADB to install the Android Market application.
- Root your tablet either using SuperOneClick or Z4Root as described previously. Reboot your tablet.
- Download the required Google Apps distribution from the link mentioned in the article.
- Extract them to some place on your machine.
- Make sure ADB is in your PATH. Open the Command Prompt and navigate to the folder where you extracted the googleapps.rar archive.
- You should see something like shown below.
- Navigate the command prompt into the "app" folder.
- Using the ADB shell, first mount the /system on your tablet. Then run the following commands to push APK files to /system/root/
- c:\temp\Working Google Apps\app> adb push GoogleServicesFramework.apk /system/app
- c:\temp\Working Google Apps\app> adb push OneTimeInitializer.apk /system/app
- c:\temp\Working Google Apps\app> adb push SetupWizard.apk /system/app
- c:\temp\Working Google Apps\app> adb push com.android.vending.apk /system/app/Vending.apk
- Notice the Application for Market is renamed to Vending.apk (don't think you need to do this, but everyone else uses Vending.apk)
- Shown below is the command prompt snapshot for your reference
- From the above you should have understand by now that I am only interested in making the Android Market work.
- Don't forget to un-mount the /system and also reboot the device as soon as you are done copying.
- Once the tablet boots, you will be seeing a welcome screen.
- Just go through the welcome screen and add your google account.
- Now go to Market and make sure it runs.
Some issues that I had
- ES File Explorer –> Menu –> Settings –> Root Options. Check the "Root Explorer" failed with message "sorry, test failed. This feature cannot run on your phone" message. So what is the alternative ? Use ADB, it might sound intimidating but it is just a simple Shell prompt. If you are messing around your tablet, most likely you are comfortable with the command prompt.
- There is a great tool called "File Expert". It is one tool that impressed me a lot! It is similar to ES File Explorer but much better looking and much easier and intuitive to use. You can upload files from your PC without having to connect your tablet.
- Install File Expert. You can get it from the App Center that ships with the SN10T2 as well.
- Launch File Expert. Go to "Share my contents".
- Just touch on the "Share via Web" option. Viola!
- Now you should see a brief message explaining how you can access your tablet SD Card from the Web Browser.
- Uploading multiple files from File Expert Web UI. You cannot upload more than one file when you are in the root of the SD Card. But create one folder and then you would be able to upload multiple files simultaneously.
- MOUNT Options in File Expert does not work and can make you believe that it worked. So what is the alternative?? Use ADB.
- If you manually move some files to /system/app in File Expert of ES File Manager, you may believe it was successfully copied, but they aren't really done. You don't see an error that /system has to be mounted.
- If you are messing with different versions of Google Apps, the one in the link by Sir ShagsALot is the only one I found to be working. If you mess up, then remove the APK files from the /system/app manually.
- I copied bad APK files and was stuck with Emergency dial screen. So what I realized later was that SetupWizard was badly renamed. So I removed the APK files and copied them keeping the name intact.
- Again, if you are stuck with wizard screen and reboot doesn't help, use ADB to delete the APK file.
- Android Market app is installed but launches and dies immediately. You need to make sure GoogleServicesFramework.apk is properly installed/copied into /system/app folder. When in doubt, repeat the process after taking some break.
- Android Market App launches but cannot download application. The application page seems to be stuck at "Starting download…". This only happened when I installed incompatible version of Android App Market.
So these are all the things that I struggled with this week and I hope anyone like me who is new to Android Rooting may find this information helpful. By the way, don't forget to check out SlateDroid. They are awesome!
Sunday, January 16, 2011
WPF Events to Command redirection using System.Windows.Interactivity
As mentioned previously, I recently used System.Windows.Interactivity library to make a command respond to an event on WPF controls without using any code-behind. In this post, I would give a brief overview and show some code on how to do it. I will try and keep the post to the point and not write anything about hooking up events with code or anything like that. Usual disclaimer applies – I am not entirely familiar with the internals but I know how to make it work and why it works.
So lets start with my simple requirement. I have a text box and as I enter I want to fire a command which processes the text and displays it on a textblock. Of course you can hook up both the controls to the same property in the ViewModel and with .NET 4.0 you can be sure that the getter will fire again when NotifyPropertyChanged is fired. But that is not the point here.
My XAML would simply have a textbox and a textblock. On textbox.TextChanged event fired, I would like to execute a command in my view model. The XAML is shown below.
<UserControl x:Class="Buddi.Training.Advanced.Interactivity.EventToCommandDemo"
<Grid Background="Beige">
<RowDefinition Height="100"/>
<RowDefinition Height="100"/>
<TextBox Text="{Binding SampleCommandParam,UpdateSourceTrigger=PropertyChanged}" Margin="20">
<i:EventTrigger EventName="TextChanged">
<local:EventToCommand Command="{Binding SampleCommand}"
CommandParameter="{Binding SampleCommandParam}"/>
<TextBlock Text="{Binding Message}" Grid.Row="1" Padding="30" FontFamily="Consolas" FontWeight="14"/>
You need to see how I am hooking up the event to the command in viewmodel which is the DataContext of the View (UserControl to be precise). Lets disect what we have here - We add an event trigger to the TriggersCollection on the Grid using the Interactivity.Triggers attached properties. An event trigger comes with the System.Windows.Interactivity.dll assembly. So add a reference to that library using the "Add Reference" dialog. The Event Trigger then expects an action that can be anything that derives from the TriggerAction<FrameworkElement> class. The TriggerAction That's it! you can now program to the events using the commands that you already have. This lets you keep your code-behind clean and write more testable code than ever. I hope this is useful inspite of it not being the best of the articles. By the way, almost every MVVM framework out there provides an implementation of Event To Command action -eg : Caliburn, Cinch, you name it ... but not always it is possible for us to use a third party framework just for this one reason. In such cases, I thought it is good to know that you can acheive it just by using Microsoft's assembly.
namespace Buddi.Training.Infra
public class EventToCommand : TriggerAction<FrameworkElement>
public ICommand Command
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
public static readonly DependencyProperty CommandProperty =
DependencyProperty.Register("Command", typeof(ICommand), typeof(EventToCommand), new UIPropertyMetadata(null));
public object CommandParameter
get { return (object)GetValue(CommandParameterProperty); }
set { SetValue(CommandParameterProperty, value); }
// Using a DependencyProperty as the backing store for CommandParameter. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.Register("CommandParameter", typeof(object), typeof(EventToCommand), new UIPropertyMetadata(null));
protected override void Invoke(object parameter)
if (Command == null) return;
if (Command is RoutedCommand)
var rc = Command as RoutedCommand;
if (rc.CanExecute(CommandParameter, base.AssociatedObject))
rc.Execute(CommandParameter, base.AssociatedObject);
if (Command.CanExecute(CommandParameter))


text:
Phish.net is delivered to you thanks to a number of technologies.
The site design and source code is authored by Adam Scheinberg, with significant contributions from Pete Skewes-Cox, and Stephen Blackstone.
The Phish.net foundation is built on Linux, Apache, PHP, and MySQL. We make extensive use of the GPL GNU tools on Linux. We use memcached for in-memory caching and PHP Active Record as our PDO-based database API.
Git is our revision control system. Let's Encrypt and Certbot provide our SSL certificates.
On the client side, we rely heavily on jQuery. We make use of RequireJS, MomentJS, and Handlebars in some sections of the site. Bootstrap provides our basic layout, with SASS as a CSS pre-processor. Other packages in use include Bootstrap Sortable and ckeditor.
"Fort" fonts used on this site are © 2012 by Jeremy Mickel and they are used under license from MCKL and Village Type & Design, LLC. "Tungsten" fonts are © 2004, 2012 by Hoefler & Frere-Jones and they are used under license from Hoefler & Company. "Convergence" and "Bree Serif" fonts © Google Fonts/Type Together SRO, used under SIL Open Font License 1.1. Font Awesome copyleft Dave Gandy.
Phish.net is a non-commercial project run by Phish fans and for Phish fans under the auspices of the all-volunteer, non-profit Mockingbird Foundation.
This project serves to compile, preserve, and protect encyclopedic information about Phish and their music.
Credits | Terms Of Use | Legal | DMCA
The Mockingbird Foundation is a non-profit organization founded by Phish fans in 1996 to generate charitable proceeds from the Phish community.
And since we're entirely volunteer – with no office, salaries, or paid staff – administrative costs are less than 2% of revenues! So far, we've distributed over $2 million to support music education for children – hundreds of grants in all 50 states, with more on the way.


text:
Why Do You Need to Meditate?
Why Now is the Time to MeditateThe most important reason why people have been practicing meditation since time immemorial is that it swiftly brings you into alignment with your core being. This is where you will find balance and true peace.
In our modern-day culture, however, meditation is most commonly practiced to alleviate stress.
Both reasons are as good as any to start practicing this amazing art that is meditation. If you do already meditate - good on you. If you are thinking about it - now is the time!
What Exactly is Meditation?
Let's cut past any preconceived notions about meditation. It does not require that you:
Sit in any position that you find uncomfortable
Need to chant or repeat a mantra
Need training or classes
Need to belong to a specific religion or faith
These things are optional and entirely up to the individual. The most important thing about meditation is…
The art of being still and quieting your mind
It is the ability to bridge the gap between the thinker and the thought-less. You are offering your self a chance to still the mind-chatter (you know, that continuous loop of 'what ifs' and 'don't mind if I do's'). I like to refer to this is mind-static - just like the white noise you see on a TV screen when there is a disturbance with the reception. Our minds can be on a continuous buzz, enough to drive us to the brink of insanity.
This is where meditation will help you to de-clutter your thought processes and align you to your higher purpose through contact with your higher self.
Okay, Sounds Good but How do I go About This?
Simple. All you need to do is:
Concentrate on your breath - this easy step allows you to be more present and centered in your body. It also diverts your attention from thinking to breathing. If you like, use a mantra - this is a common tool used to stop any unwanted thoughts from creeping in.
Close your eyes and relax your body - Feel and imagine the stress draining away as you begin to let your vitality blossom.
Feel the tingle - acknowledge the prana or life force that is embodied in every single cell. This is sometimes felt as a tingling sensation in the body. Starting from your feet upwards, expand on that tingling sensation. This amplifies the life-force in your body. Notice how you feel when you do this. Are you feeling alive and vibrant? Are you relaxed and peaceful?
Opening your crown chakra - breathe in and imagine a white light streaming in through the top of your head (crown chakra) and permeating your entire body.
Relax - the above are only steps to get you into the present moment. When you feel relaxed and peaceful, just be with that feeling for as long as you can. You are now meditating!
adam hand 250x166
Why Now is the Time to MeditateYou can start with just 5 minutes of still, quiet breathing a day and then gradually work your way up to 10-20 minutes at a time.
You do not have to stick to any method to get you to your place of inner peace, just do what works for you. The main point of meditation is to relax and take a break from the constant mind-chatter.
Try to practice this at least 1-2 times a day.
What are the Benefits?
Meditation gives you the space to relax your body and to recoup your mind
It is proven to reduce stress
It is a gateway to discovering your authentic self
And remember:
"Thoughts create everything ~ have clarity of thought and you can achieve anything…"
This was a guest article written by Cherie Roe Dirksen for Lightworkers World


text:
Linux networking made easy
Common Linux networking questions answered
Ten years ago, most of us thought we would be able to live a full and happy life without worrying about whether we were getting maximum throughput across our networks, or whether the point-to-point latency on our machines would preclude us from popular gaming. But things have changed.
Televisions, games consoles and Linux machines all vie for IP addresses and bandwidth, usually on the same network, with poor wiring, poor layout and do-it-yourself support. Which is where we come in.
The Linux platform is the direct result of this network connectivity. It's an operating system that was designed from the first line of the kernel to talk to another kernel, and as a result, it's the perfect network troubleshooting platform.
You won't find settings hidden, parameters unprobed, or hardware unhinged under the surface, which is why Linux makes both a fantastic training ground for future system administrators, and a powerful ally in the hunt to track down intermittent problems and poor performance.
This is why we've pooled as many of the most common networking questions we could find. The answers should help you better understand how Linux handles the network, what kind of troubles are likely, how to get the best performance and how to create the most stable network in your neighbourhood.
How can I change my hostname?
On the surface, this might sound like a rather technical question to start our networking article with. But your computer's hostname is really just the name you give your machine when you install most distributions.
Get daily insight, inspiration and deals in your inbox
Sign up for breaking news, reviews, opinion, top tech deals, and more.
Ubuntu will ask you for a descriptive name, for example, and this is displayed when you use a login screen or open a command prompt. But it's also the name used for your computer on the local network, and this is why, historically, it's called your system's hostname – the machine that's hosting your current session.
It's also a perfect illustration of how difficult Linux can sometimes be to manage, because with most distributions, there's no longer a GUI for changing something as simple as the hostname.
The old Gnome network manager used to have a field you could change, but this has now gone, leaving users facing either the command line or a tool such as Ubuntu Tweak. Fortunately, making the change on the command-line isn't that difficult, but you do have a couple of choices.
The hostname command should be up to the task, taking the new name as a single argument. But we found that this only seemed to make a temporary change on our system, which left us resorting to the old-school method: editing the /etc/hosts and the /etc/ hostname files, and simply replacing the single occurrence in each of the old hostname with your new new one.
Either way, after you've changed your hostname, you'll need to logout and back in again to see the effect, and for seeing the changes across a network, it's easier just to restart your machine.
How can I share my internet?
Now that most of us use a wireless router to access the internet, sharing an internet connection isn't as much of an issue as it used to be. New machines can either connect wirelessly, or use a spare Ethernet port on the back of the router. But if you do find yourself wanting to share a connection from your machine, there are several different ways you can do so.
If you have two Ethernet ports on your machine, one of which is connected to the internet, you can use the other port with a crossover cable to connect a spare machine. You then need to use your desktop's network manager to enable sharing on the working connection.
Gnome's default network manager includes this option, as does the version shipped with the latest versions of Ubuntu. You also need to use the network manager if you've got two Ethernet cards and only want to enable one. If they're both connected to valid DHCP servers (or are configured manually), and both use the same subdomain, they could conflict with one another.
Fortunately, enabling and disabling connections through the network manager is as easy as either deleting it completely or selecting it from the drop down list of connections from the menu.
How can I set my time using NTP?
Computers are really just big time pieces, yet despite their number crunching accuracy, they're not the best devices for keeping time, especially when it comes to switching between daylight saving modes. And if you travel with a laptop, very few distributions detect a change in location and update the time accordingly.
Of course, if you've got the patience and a decent chronometer, you can easily update the time on your system yourself, using anything from the system BIOS to the little clock that sits in your task bar.
But there's a better way, and it's a way that doesn't require caffeine-enraged reflexes. You can use something called NTP, the Network Time Protocol. This will synchronise your clock with a couple of local servers, and in the process, turn your machine into a local atomic clock. Almost.
If you're a GUI fiend, most system clock applications already include this feature. With the KDE desktop, for instance, you can right-click on the clock within the panel and select Adjust Date And Time. In the window that appears, you now just need to click on Set Date And Time Automatically. This will enable the Time Server field just below, and from there you should select an NTP server closest to your physical location.
If you prefer to use the terminal, the command you need to use is called ntpdate. It's usually installed by default, but you'll also need the internet addresses of two time servers. The easiest way to find them is to point a browser at www.pool.ntp.org and choose a couple of servers from the list on the right.
Two are needed, because ntpdate triangulates the latency between you and the remote servers to generate a more accurate local reading. For this reason, it also helps if the two servers you choose are geographically close to your current location. It's then just a matter of typing ntpdate -b 0.uk.pool.ntp.org 1. uk.pool.ntp.org, preceded by su or sudo if you don't have the correct permissions to change the time.
You'll see the time update and the output from the command will tell you by how much the clock has needed to be adjusted, which can be a useful indicator of when you should next schedule a time update.
Why do websites sometimes fail to load?
If your network appears to be running properly, but typing a URL into a browser results in nothing but a timeout message, then there's a good chance your problem is within a DNS server. It's the job of the DNS to translate the text-based addresses we use for most servers and websites on the internet to the numeric IP address used by the hardware.
If your DNS is working, for example, you can type ping linuxformat.com into a command line, and the first line of output should show something like the following: PING linuxformat.com (22.214.171.124) 56(84) bytes of data.
If you've not used ping before, it one of the simplest network diagnostic commands you can run. It sends a 'ping' message to a remote server. If the message is received, the remote server sends a 'ping' message back. Believe it or not, the name comes from the sound a submarine's sonar makes as it maps a surface.
You can see in the output of the command that the DNS has transformed our request for the Linux Format server into an IP address (22.214.171.124), and this is the first test you should try if you suspect you've got problems. It's also worth knowing the IP address of a server, as this can be used instead of the URL.
If ping requests are returned from an IP address and not from a URL, you've almost certainly got a DNS problem, and the best solution is to change your DNS. These days, your DNS server is mostly configured through the DHCP server that provides your computer with an IP address.
For most home systems this means your router, and it's also likely that the DNS server itself becomes the address of your router, which means that the first place to look if you want to change it is your router's configuration web page.
After you've found the location of the DNS configuration, use ping to check whether the IP address is still working. If not, check with your ISP to see whether this address has changed. If it has, just replace the old address with the new one. If not, you could always replace the old DNS address with a public server, such as those run by OpenDNS and Google.
OpenDNS addresses are 22.214.171.124 and 184.108.40.206. Google's are easier to remember – 184.108.40.206 and 188.8.131.52 – but both promise to speed up the time it takes for your computer to get the IP address from a URL.
You can also change the DNS on a per-machine basis, and the graphical network configuration tool for your desktop should include the ability to modify the DNS server you're using. If not, the file you need to edit is called /etc/resolv.conf.
Newer distributions that rely on DHCP may not create this by default, so you'll need to create the file yourself. It should just contain something similar to the following:
nameserver 188.8.131.52
nameserver 220.127.116.11
As you should be able to see, we've used the IP addresses of Google's DNS service, but you could easily replace these numbers with the ones for OpenDNS, or even your own router or gateway if that gives you the results you need. Either way, before you'll feel the effect of any changes, you'll need to either restart your machine, or the network (try service networking restart).
Why isn't my USB modem working?
USB modems, of the old dial-up kind and the newer ADSL kind, are mostly dumb. All their functionality is loaded at boot time into the general-purpose processor running inside the box, and without a driver, these boxes can't function.
This is why so many USB modems don't work with Linux, because it's not a simple case of needing to reverse engineer the driver – it's a case of developing all of the modem's functionality from the ground up.
The exceptions are when the firmware for the modem (that's the code that runs on the processor) is made available. A Linux driver can then upload the code to the modem, which should then function perfectly. The only problem is that manufacturers are often reluctant to allow their firmware's to be redistributed, and the binary redistribution of firmware irks many free software advocates.
If your modem isn't working, this is likely to be the problem, and the best solution is something called NdisWrapper. This enables you to use Windows XP drivers for your device within your Linux environment. But before it will work, you have to first locate the .inf and .sys files hidden within the Windows driver package.
The best way to tackle this formidable task is to head over to the NdisWrapper wiki and search for your hardware. If your particular device is listed, you should find instructions on how to locate the files you require. It's then just a case of using either the command line or the GTK front-end to locate the files and install the driver.
After which, your system should detect and configure the hardware in exactly the same way as it would have had it installed a native driver.


text:
Boiling Spring Lakes Foreclosure Defense Lawyers
Bevin Wall
(252) 223-4411
University of North Carolina - Chapel Hill
Bruce Allen
(910) 867-7770
Chicago-Kent College of Law, Illinois Institute of Technology
Kenneth Love
(888) 465-1891
University of Cincinnati College of Law
Cameron Lambe
(919) 263-5296
University of North Carolina School of Law
James Spielberger
(800) 481-2180
Georgia State University College of Law
Omari M Wilson
(919) 695-3485
Capital University Law School
Aaron Hemmings
(919) 277-0161
University of Dayton School of Law
Ashton Lee Cooke
(800) 672-5839
University of North Carolina School of Law
Edward H. Maginnis
(919) 526-0450
University of Virginia School of Law
R. Todd Mosley
(828) 412-8700
University of Memphis Cecil C. Humphreys School of Law
Blake Younger Boyette
(919) 296-5040
University of Richmond School of Law
James C White
(919) 246-4676
Duke University School of Law
Robert Morton
(919) 845-5000
North Carolina Central University
Mr. Benjamin David Busch
(919) 246-4705
University of Akron
Trenton Michael Grissom
(800) 481-2180
Wake Forest University School of Law
Ms. Kelly Frecker
(704) 271-5000
University of Miami School of Law
The LII Lawyer Directory contains lawyers who have claimed their profiles and are actively seeking clients. Find more Boiling Spring Lakes Foreclosure Defense Lawyers in the Justia Legal Services and Lawyers Directory which includes profiles of more than one million lawyers licensed to practice in the United States, in addition to profiles of legal aid, pro bono and legal service organizations.
Researching Attorney Discipline