NEWS: Prozac Xanax Online Crestor Low interest apr credit cards Credit cards fixed apr! Credit score Famvir Lotensin Diazepam Valium Buy Soma? Levitra Cialis Tramadol. Aciphex Celexa? Cicsco VPN Cheap Avandia Buy Zoloft. Xanax Zoloft Netgear VPN Credit reporting agencies in Caverta Valium Exxon credit card application Application card credit instant response: Premarin International credit reporting Wellbutrin Check your credit report Calan Cymbalta Free VPN client Fica credit score Levitra Vs Viagra Sumycin? Zoloft Set up a VPN Synthroid. Stop credit card application mailers Online Zithromax Credit reporting system Pravachol Your credit score Allegra Valtrex Periactin: Set up a VPN, A qualified mortgage consultant can help boost credit scores? Xanax Bars Credit score check New Ringtones Credit report and, No credit card application Credit score in Prilosec Free credit report service! Contivity VPN Increasing credit scores: Setup VPN Ativan Drug Nolvadex. Nizoral Credit card application forms Prilosec? Aciphex! Freeze credit reports Clean up your credit report Cipro Levaquin Xenical Transunion free credit report Verizon Ringtones Xanax Xr Buy Levitra Levitra Vs Viagra Poor credit scores? Instant approval low apr credit cards Disneyc redit card: Juniper credit card application Nortel VPN Credit report sample To improve credit score Application card credit interest low Victoria secret credit card application Lipitor Buy Atarax: Viagra Soft Tabs Internet VPN xp Viagra Acyclovir Lorazepam, Trans union credit score Cheap Cialis Jelly Norvasc Claritin Singulair Online Viagra? Online Cialis Soft Tabs My annual credit report! Instant credit cards approval Tramadol Propecia Credit reports com Florida free credit report, Instant approval cards Plendil Ultram Discover secured credit card Accutane! Fosamax Cheap Zyloprim! Instantly instant free online credit report Credit score online: Clomid Xenical Affect credit score com Linux VPN Buy Glucophage Cheap Protonix. Buspar: Buy Zocor Buy Effexor VPN client Cheap Arava Adderall How do i get my free annual credit report Protonix Instant approval canadian credit cards Internet privacy Seting up a VPN Buy Viagra Soft Tabs Inderal Levitra Online Buy Flomax Online Tramadol Bad credit instant approval credit cards, Correcting credit reports Install VPN No credit checks and instant aproval cards Credit card application bad Ultracet Obestat Best card credit debt help vermont Improve my credit score Risperdal Levitra Annual creditreport.com Diovan Buy Nexium. Cialis Anafranil! Avalide Credit score reports: Providian credit card application: Credit score car loan Business credit card online application Creditscore Xenical Fixed low apr credit cards. Is 700 a good credit score Ultram? Cialis Free consumer credit report: Meridia Unlimited credit reports Apr for credit cards? Butalbital Fix my credit report Credit score definitions. VPN tunneling Paxil Cheap Cialis Soft Tabs Reporting to credit Cialis Soft Tabs Carisoprodol Soma, Best way to eliminate credit card debt Washington mutual credit card application Cozaar Card credit debt debt negotiation reduction service Unsecured credit card application online Free Verizon Ringtones Xanax Side Effects Phentermine Dance Last Ringtones Adderall: Find out my credit score How to improve credit scores Instant approval bad credit cards! Credit report fico scores Credit history report Major credit reporting, Highest credit score Zovirax Credit report business Cheap Cymbalta. Propecia Generic Cheap Lisinopril Effexor Zyban Propecia Generic 580 credit score Fioricet: Credit card debt consolidation: Eminem Ringtones Viagra Soft Tabs Prozac. Applications for credit cards Xanax Bars Client dns openVPN. Naprosyn 0 apr credit card application Codeine Cialis Online: Remeron Viagra Alternatives Kiss Ringtones. Retin Deltasone Proscar Norco! Disputing credit report. Avodart Hytrin Free instant online credit report? Propecia Drug Best creditcard debt reduction strategies Danazol Free credit report online no membership Repair credit score Cheap Levitra Credit scores online Gas credit card application Flomax Carisoprodol Plavix Cheap Ultram Secured credit card application Instant approval credit cards for Cic credit reports Arava Cialis Vs Viagra: Zanaflex Unsecured credit card applications Lipitor Chase credit cards 29.99 apr Online Herbal Phentermine Client VPN Credit score system: Lorazepam Free credit report no membership, Ultram Client dns openVPN Cheap Atarax Buy Synthroid, Cheap Nizoral 800 credit card debt Debt consolidation for credit card and vehicle loan ics Debt consolidation credit cards: Zetia Information credit report Find my credit score? Phentermine Cymbalta Cheap Viagra Credit card debt termination. Canada credit card online application Free online credit score Alprazolam Online Arimidex Credit score reports How do i get a free credit report? Ipsec VPN All three credit reports Effexor Augmentin Buy Cleocin Lortab 0 credit card application Tylenol Free instant credit report online, Topamax Cheap Imitrex Secured credit card canada Apply for a fleet low interest credit card application! Cipro Hoodia Three credit reports! Credit score mortgage Low interest credit cards visa fixed apr Internet VPN xp Equifax free copy of credit report, Boost your credit score Cardura Online Phentermine Hc Repairing credit score For credit scores: Flagyl ER Best credit card rebates Kmart credit card reward Aristocort, Avapro To credit reporting Transunion credit reporting agency Credit reporting service, Buy Remeron Improve credit scores Paxil Phentermine Diazepam Valium Desyrel Credit score loan! Tramadol, VPN dialup Application jc penny credit card Buy Amoxil! Credit credit card applications Virtual private network Credit rating report, Cheap Zoloft Instant approval credit cards Zyban. Phentermine Credit cards mwith low apr? Torn up credit card application, Zovirax Interpreting credit scores Buy Valtrex. Cancel card credit debt! Buy Allegra Cheap Phentrimine Prevacid! Adipex Cheap Zyban Clomid Cheap Tramaden Creditcards with low apr rates. Retin A Credit report fico score America credit card debt statistics Cialis Professional Buy Zithromax: Credit report equifax Search high limit credit cards instant online approval Free business credit report Guaranteed instant approval credit cards Chase redit card srevices Lasix Cialis Professional Diazepam Elysium Ringtones: Avandia Buy Aldactone VPN setup Freecreditreports Imitrex, Soma Walmart business credit card Cheap Glucophage Differin Credit card application. Freee credit report Voltaren Glucophage Low apr student credit cards! Usa credit card company! Alprazolam, Dynamic ip VPN. Plavix Enable VPN Tylenol Buy Lipitor: Buy Lisinopril, History transunion credit report. Lipitor Cialis Generic Cheap Levaquin: Valtrex Movian VPN, Evista Cancel credit card debt Crestor Credit card application center Set up VPN About credit reports Instant online approval credit cards fleet! Atarax. Levaquin Prepaid credit card uk, Cosigning credit card applications, Celebrex Flagyl ER Cephalexin Danazol Citi credit report Lamictal Anonymous surfing Indocin On credit scores Credit report uk Information from credit report Stop credit card applications Lipitor Buy Diflucan! Lipitor Cheap Tramadol Norvasc! Selena Ringtones, Motrin Unsecured credit card application Free credit score check, Low apr interest credit cards Viagra Uk Setup VPN Best credit card debt help? Female Viagra Configuration VPN Bad credit cards instant approval Ambien? Cacu secured credit card? Credit cards offering 0! Canada credit card application Business card consolidation credit credit debt debt finances: Xanax Online capital one zero apr credit card application. Ambien Credit card applications instant approval: Buy Zyloprim VPN server Application credit card Credit report with scores Ceftin Luvox Carisoprodol Soma Cheap Cephalexin Viagra Alternative Avodart Zyloprim: Credit card debt management credit card debt counseling! VPN Xanax Risperdal Neurontin Nexium Fix my credit score? Famvir Lowest fixed apr credit cards Three credit reporting agencies Cialis Vs Viagra Cingular Ringtones Free online credit report canada Online Rimonabant Maxis Caller Ringtones Card credit debt eliminate forgiveness. Valium? Free credit report no credit card required Tina Turner Ringtones Buy Viagra + Cialis + Levitra! The fair credit reporting, Online Cialis Professional Buy Sumycin Cialis Soft Tabs Online Viagra Jelly No credit score mortgage. Fioricet Trimox Cheap Cialis Professional Zithromax Credit report .com Cephalexin Get my credit report High credit score! Zyrtec! Kamagra 50 Cent Free Ringtones Buy Viagra Free instant credit report with no credit card Check my credit report Cheap Elavil Periactin My credit score for: Cipro How to raise my credit score Citi bank credit card application Buy Zanaflex? What are credit scores Viagra Phentermine Hcl Credit report score chart: VPN setup xp Singulair Meridia, Imovane Calan Propecia Instant online approval for credit cards Cheap Clomid Lipitor Paxil Alltel Ringtones Cheap Aciphex To raise my credit score Instant fleet 0 apr credit card application Lowest apr rates on credit cards: Polyphonic Ringtones Debt credit cards settlements Vicodin Hsbc credit card application and verification fraud Prozac! Propecia Low apr credit cards uk Your credit report My credit report. Yerba Diet: Buy Norvasc Avalide Soma Buy Depakote Out my credit score Maxaquin Instant approval online credit cards Tofranil, Score credit: Nexium VPN client Credit card debt manageme Credit card debt uk Student credit card debt statistic, Credit score rankings Cheap Buspar Zoloft Cheap credit reports, Credit report and scores Cheap Flomax Levitra Online master card credit card application Inderal Cheap Hoodia Gordonii HG p57 Paxil! Low apr balance transfer credit cards Anualcreditreport.com No apr credit cards Ditropan Elavil Kamagra, Credit scores meaning Valium Online Mysoline Credit card transfer offers Instant approval business credit cards Zyloprim Diazepam 5mg Mobic Credit card application bad credit Bontril Buy Zyrtec Buy Cymbalta! Xenical Card consumer credit debt stastics Baclofen Cheap Plavix Premarin Contivity VPN, Valium Best credit card offers Deceased credit card debt, Credit card debt information Lozol Zanaflex! Buy Buspar College students average credit card debt! Cheap Neurontin: Cleocin Mortgage credit reports Free Mp Ringtones Premarin Credit card bad debt 0 apr balance transfer over 70 credit cards! Topamax Tofranil Phentermine? Card credit debt option reduction Information credit report Adalat Credit cards 1.99 apr ny Levaquin Buy Accutane 0 apr creditcards? Instant approval credit cards applications, Zovirax Zelnorm, Three in one credit report Allegra. Alprazolam Personal credit reports VPN security Zyban Credit cards online application Instant approval credit cards. Flomax Lil Flip Ringtones Kmart credit card application Credit repair report service Report free credit card required instant online. Credit score values Zyban Credit cards instant approval access Buy Aciphex? Remove credit card debt Credit report score trans union Ultram Whats my credit score? Propecia Reviews. Movian VPN Walmart credit card application Cheap Female Viagra How to get free credit reports, Propecia Cost Inderal Remove credit card debt Levitra Get a free credit report Diazepam 5mg Credit reports canada Indocin Get my credit score Clarinex Credit card application with instant decision Secure VPN Buy Hoodia Credit card processing offer VPN security Adipex Online Tramadol Online Credit report monitor Adipex Instant capital one 0 interest credit card application Propecia Propecia Credit card reward offers! Cheap Clarinex Credit card application with instant approval Lowest apr credit cards: Credit bureau score Diazepam? Cibc credit card application: Credit card application instant approval number Seting up a VPN Lisinopril Cialis Generic Proscar Card con consolidate credit debt Credit score online: Phentrimine VPN download. Check credit report Cipro Annual credit report free. Avoiding student credit card debt Viagra Instant approval credit cards applications Credit score uk Glucophage Zoloft, Mac os x VPN Interest rate credit score My credit scores, Lone Star Ringtones Mac os x VPN Cheap Lexapro Free credit card application center Whats a good credit score Trw credit reports: Celebrex Pravachol Alprazolam Unpaid credit card debt. Canada credit card application. Altace Free access to credit reports? Carisoprodol No credit instant approval credit cards Parlodel Arimidex Get a credit report Credit reporting services Ultram Sleepwell: My credit report for Instant approval bad credit unsecured credit cards Desyrel Stop credit card applications How to improve my credit score: Tenormin Cheap Actos. Unsecured credit cards low apr interest annual fee, American express cards instant approval bad credit! Ativan Online Are credit scores Credit card application for people with bad credit! Fioricet Codeine! Credit reporting bureau Free Real Ringtones Cheap Prednisone Credit report sample! Obtain a credit report Cialis Soft Tabs. Tylenol Best apr credit cards No credit card application, Three credit reporting agencies Buy Lamisil. Instant capital one low rate credit card application Buy Nolvadex Tramadol Corporate credit card application VPN setup Buy Hoodia Gordonii HG p57 Renova Credit rating scores Chevron credit card application: Dispute credit reports, Good credit score: Credit card application form? Credit reporting bureau? Soma Credit report no credit card Desyrel Online Viagra Professional: Raise your credit score? Fioricet With Codeine Mbna credit card application Credit bureau scores Zyrtec Card credit debt negotiation settlement: Instant approval credit cards in uk Free online credit report no trial offer 5 Application card credit online secured Coreg Free credit rating report Scores credit card fraud Anafranil Debt credit report. Hytrin Didrex: Seroquel N Sync Ringtones Providian credit card application. Online Acomplia Buy Acomplia! Viramune Trimox Household bank credit card application Meaning of credit scores Plendil Credit cards with low apr Buy Coral Calcium Credit report fico scores Cialis Soft Tabs Nextel Ringtones Instant credit approval cards Lisinopril Shell credit card application. Cheap Flonase! Phentermine Hcl Credit score interest rate Samsung Ringtones Ansaid Average credit scores 0 apr credit cards: VPN tunnel Highest credit score Transunion credit reporting Dianabol Soma Bontril: Tramadol Hcl Effexor: Phentrimine Xanax Side Effects Buy Elavil Best credit score Neurontin, VPN tunneling Credit report! Lowest apr credit cards! College student credit cards with instant approval Virgin credit card application Ativan: Bactrim 025 apr balance transfer credit cards in canada VPN Naprosyn Allegra Cheap Viagra Soft + Cialis Soft Secured credit cards low apr credit card balance transfer Vantage credit score? Online Female Viagra! Bactroban Cheap Zocor Mortgage credit score, Popular press article on college credit card debt? Buy Clomid Zerit Alprazolam Xanax Fair credit reporting act summary! Maxaquin Rimonabant. Synthroid Free credit report scores Buy Tricor. Cheap Nexium Cialis Augmentin: Propecia Bankruptcy credit report Cheap Famvir: Atacand Slimfast Credit scores online: Loans credit score Annual credit report free Firewall and VPN Virtual private network. Free credit report gov: Credit reporting companies Zelnorm 025 apr balance transfer credit cards, Buy Augmentin. Credit score of Your credit reports Propecia Online Vantage credit score Real estate investing information free credit report score? Credit plus score Cialis Side Effects Viagra Alternative Propecia Canada Does your credit score Remeron Instant approval on credit cards! Buy Evista Credit report and scores Naprosyn Diflucan Secure VPN Good credit scores Diclofenac Instant approval low interest credit cards Internet privacy Tramadol Hcl Acomplia Bank credit card application Apr balance transfer credit cards Buy Zyban! Enable VPN Anonymous internet Augmentin Chase credit card application status Phentermine No Prescription Bactroban Lozol? Credit cards us instant approval Cheap Avodart Create VPN Kamagra Instant free credit report Download Free Ringtones Instant approval credit cards for people with bad credit Client VPN Bad credit instant approval cards Card credit debt eliminate heritage Chase manhattan credit card application Diflucan Business credit score Tramadol Cod For credit score, Aldactone Get credit score! Instant credit card application Instant approval credit cards bad credit? Credit scores mortgage? Flonase Cleocin 5? Credit cards 0 apr Fixed apr business credit cards! Card credit debt forgiveness settlement! Accept credit card payment Credit score ranges? Fixing credit report All 3 credit scores? Buy Paxil Credit score questions Cheap Ultracet VPN tunnel Instant credit score Deltasone Propecia Uk Celexa Dave Hollister Ringtones: A credit card application Mobic? Viagra Negotiating settlement credit card debt! Atarax Nokia Ringtones Valium No Prescription! Credit card applications for bad Cheap Danazol Debt consolidation versus credit card payment Credit report bureau Propecia Uk Cheap Zanaflex Luvox O apr credit cards! Phentermine Diet Pills? Cheap Lamisil Uk credit card application All 3 credit scores! Buy Imitrex, Best apr credit cards! Naprosyn Free credit report no membership online. Nizoral Fix credit score? Buy Famvir Celexa Diovan Phentermine Cheap Cozaar Hoodia Zyprexa Cheap Herbal Phentermine VPN connection Effexor: Card credit debt help Effexor Average national credit score Cheap Wellbutrin SR Atarax Ambien San diego credit score needed to get a mortgage Buy Ultracet VPN setup xp: Buy Cialis? Hydrocodone Zocor: Free instant credit report online no credit card needed Trans union free credit report Absolutely free credit report Application bad card credit credit unsecured Torrente Buy Cialis Jelly Check credit report fix Card collection credit debt law, Cheap Soma Set up VPN Debt reduction solution credit card Wellbutrin SR 0 apr credit cards uk. Zyrtec Buy Rimonabant Ativan Drug Credit cards with instant approval Buy Nizoral Ativan Credit card deal maker Credit card application instant decision?

Wordpress Digg Widget

April 14th, 2007 by mike

I was taking a break from coding earlier and found a blog post on digg requesting a digg widget that would show your friends digg activity. It seemed like a pretty good idea, so I threw together a quick proof of concept. The styling isn’t great, but it works! Check out the sidebar here (on the homepage) for an example.

You can download the plugin here. Place it in the plugins directory for Wordpress then activate it under plugins (it’s called diggfriends). Once you’ve done that you can place a call to the digg_friends() function anywhere in your theme files and it will create a list of what your friends have dugg! The function takes one argument, your username, passed as a string.

 

26 Responses to “Wordpress Digg Widget”

  1. Eric Odom » New Wordpress Plugin: Digg Widget Says:

    […] Vino2Vino’s Mike jumped right on the challenge by pumping out a fairly simple Wordpress plugin that will display a user’s friend list of recent Diggs. […]

  2. Eric Says:

    Mike,

    Thanks for the quick action! How hard would it be to add a little style and maybe pull in some extra data such as # of Diggs and a link to the users profile?

    Awesome work!

    -Eric

  3. mike Says:

    It wouldn’t be hard at all. I’ll do some more work on it later, but I have a few things to do tonight to get ready for the Web 2.0 Expo tomorrow!

    -Mike

  4. Dave Says:

    Here is a flash version: (might not work on hosted wordpress account) http://www.lemieuxster.com/digg/scroller/

  5. Amazon Secret Shopping Says:

    Thanks !! Looking for this …..

  6. Joe Stump Says:

    1.) You use regular expressions instead of an XML parser.

    2.) You can get your friends diggs via RSS.

    3.) No caching, which makes our operations team sad pandas. Every page request to a blog, at this point, will result in a request to digg.

  7. mike Says:

    @Joe

    All good points, here are my responses…

    1. Regular expressions are significantly faster and safer for scraping sites like this, since they don’t throw a hissy fit if you have invalid XML.

    2. I thought of the RSS feed after I had written the scraper… I would have used it if I had thought of it before, and I’ll probably do a rewrite to use it in the future (in which case I’ll use an XML parser to parse it).

    3. Caching is good, but there’s no simple & portable way (that I know of) to cache from a WP plugin without some sort of user configuration, and this was just a quick proof of concept. The version I’m using on my site is actually using Memcache. It took about 5 additional lines to add caching with Memcache…

  8. Eric Odom » Ask and ye shall receive Says:

    […] first one to come along was Mike’s version in the form of a Wordpress […]

  9. DD32 Says:

    “3. Caching is good, but there’s no simple & portable way (that I know of) to cache from a WP plugin ”

    fetch_rss has a default cache time of 900 seconds, you cant change that timeout on a per-request basis though.
    If WP’s builtin Cache functions are enabled(not by default stupidly enough - for reasons) then you can use that to cache the RSS(or any other data) for a period of time, http://codex.wordpress.org/Function_Reference/WP_Cache

  10. Earl Grey Says:

    Superb.
    i will be adding this later today.
    Thankyou

  11. writer4webw Says:

    Hi,
    Thanks for the widget. I love those things.

  12. Wordpress Digg Widget » Blog Marketing Videos And Social Marketing Tips To Get Free Targeted Traffic Says:

    […] cool little widget for adding Digg to your sidebar.read more | digg […]

  13. psychic readings Says:

    thanks !

  14. MomLinker Says:

    Something like this was needed

  15. Ben Says:

    1) Regular expressions are slow, especially compared to just digesting an rss feed.
    2) How could you overlook rss when your goal is to aggregate content from another site, and you consider yourself some sort of web developer
    3) Caching is polite, easy and necessary with content aggregation. How would you like it if some guy released some half-arsed code that redundantly and repeatedly hit your server over and over again?

  16. mike Says:

    @Ben:

    1. Regular expressions are only slow if you don’t know how to use them. And, as I said in my earlier comment, if I had been parsing an RSS feed I would have used an XML parser.
    2. Everyone doesn’t offer RSS feeds. I apologize if my 15 minute proof of concept doesn’t utilize all of the industry’s best practices.
    3. If you’re running WP Cache the widget will be cached with the page anyways. Outside of WP Cache there is no easy way to portably cache content for a WP plugin. If someone wants to write a plugin for WP that aggregates content from my site and market it for me I don’t think I’d mind them hitting my server over and over again.

    Feel free to write something better if you’re so upset.

  17. Ben Says:

    1) With the XML parser vs regular expressions, I’m sure there’s a highly efficient xml parser in php by now that works better than performing string operations on a 35kb string. Maybe there isn’t though, php isn’t my forte.

    2) It’s not a best practice, it’s the method with the lightest load. I’m not sure if curl supports gzip or not but the RSS feeds on digg seem to be ~4kb gzipped, 35kb raw. By comparison the page is 11kb gzipped and 44kb uncompressed. When you’re distributing a blog widgit for one of, if not the most popular blogging platforms on the internet you should keep in mind that kind of significant saving for the host site.

    3) You always have a very simple caching option available - write the file to disk. For maximum benefit to the blog you’d do so after processing it. Then all you need to do is check the creation time, if it’s more than x minutes old refetch it and overwrite it.

    As far as it just being a proof of concept, I don’t think that removes any (purely ethical) obligations a developer has. It’s just rude to write and distribute a script that hits another site as hard as possible for the sake of saving 5 minutes writing a cleaner version, and it sets a poor example that’s likely to be followed in other plugins.

  18. mike Says:

    There are several efficient XML parsers, but using an XML parser doesn’t avoid string operations… Although I suppose the RSS feed is smaller.

    I’m not disagreeing with your point on RSS. I should have used it, my bad. Re: caching to disk - that’s what I would have done except that the Wordpress installation documents recommend that you chmod all of the non-upload directories to be non-writable. Many people follow these directions, which makes it more difficult to cache to disk. I could have cached to /tmp, but that wouldn’t work on Windows… I figured any reasonably highly trafficked blog would have WP Cache installed, and that would mitigate the problem.

  19. Cj B Says:

    Hi. I wrote a digg widget a couple weeks ago that uses the official digg javascript. You can download it here:
    http://www.cjbonline.org/index.php/2007/04/01/dugg-widget/

  20. Wordpress Digg Widget « News Coctail Says:

    […] Digg Widget Filed under: Uncategorized — recar @ 4:56 am Wordpress Digg Widget Ask, and ye shall receive! WP digg widget that let’s you put your friends diggs in your […]

  21. 和谐,自由 Says:

    把朋友 digg 的文章显示到你的 Blog…

    CoolCode 看来还是有问题, 本来要帖的一段代码都不能显示了。
    这个 Digg Friends 的插件很有用的。 Delicious 应该也有类似的插件吧?

    ……

  22. Devlounge | Friday Focus #27 Says:

    […] - Wordpress Digg Widget The past 7 days in Programming only saw a few items get hot, and I though the most interesting [or […]

  23. Yuzle! Says:

    Thanks man

  24. Motorcycle Guy Says:

    This shows a lot of promise.

  25. I’m Mike » Blog Archive » Digg Widget 2.0 Says:

    […] couple of weeks ago I wrote a post on the Vino2Vino development blog about a digg widget that displayed your friends’ digg activity on your blog. I wrote the widget in response to a […]

  26. Javascript, PHP, CGI, Perl, ASP, Vbscript, Ajax articles, resources and programming tutorials Says:

    Top wordpress tools of the month…

    Wordpress is the phenomenon (yeah I do believe it is one) that made a lot of dreams come true. It created a bridge between people without any kind of programming knowledge and the fact of being live and writing for people. The road is so much shorter f…

Leave a Reply