Sunday, October 18, 2015

Hacking on Atom Part II: Building a Development Process

Over one year ago, I wrote a blog post: “Hacking on Atom Part I: CoffeeScript”. This post (Part II) is long overdue, but I kept putting it off because I continued to learn and improve the way I developed for Atom such that it was hard to reach a “stopping point” where I felt that the best practices I would write up this week wouldn't end up becoming obsolete by something we discovered next week.

Honestly, I don't feel like we're anywhere near a stopping point, but I still think it's important to share some of the things we have learned thus far. (In fact, I know we still have some exciting improvements in the pipeline for our developer process, but those are gated by the Babel 6.0 release, so I'll save those for another post once we've built them out.)

I should also clarify that when I say “we,” I am referring to the Nuclide team, of which I am the tech lead. Nuclide is a a collection of packages for Atom to provide IDE-like functionality for a variety of programming languages and technologies. The code is available on GitHub (and we accept contributions!), but it is primarily developed by my team at Facebook. At the time of this writing, Nuclide is composed of 40 Atom packages, so we have quite a bit of Atom development experience under our belts.

My Transpiler Quest

When I spun up the Nuclide project, I knew that we were going to produce a lot of JavaScript code. Transpilers such as Traceur were not very mature yet, but I strongly believed that ES6 was the future and I didn't want to start writing Nuclide in ES5 and have to port everything to ES6 later. On a high level, I was primarily concerned about leveraging the following language extensions:
  • Standardized class syntax
  • async/await
  • JSX (for React)
  • type annotations
Note that of those four things, only the first one is specified by ES6. async/await appears to be on track for ES7, though I don't know if the TC39 will ever be able to agree on a standard for type annotations or let JSX in, but we'll see.

Because of my diverse set of requirements, it was hard to find a transpiler that could provide all of these things:
  • Traceur provided class syntax and other ES6 features, but more experimental things like async/await were very buggy.
  • TypeScript provided class syntax and type annotations, but I knew that Flow was in the works at Facebook, so ultimately, that is what we would use for type annotations.
  • React came with jstransform, which supported JSX and a number of ES6 features.
  • recast provided a general JavaScript AST transformation pipeline. Most notably, the regenerator transform to provide support for yield and async/await was built on recast.
Given my constraints and the available tools, it seemed like investing in recast by adding more transforms for the other features we wanted seemed like the most promising way to go. In fact, someone had already been working on such an endeavor internally at Facebook, but the performance was so far behind that of jstransform that it was hard to justify the switch.

For awhile, I tried doing crude things with regular expressions to hack up our source so that we could use regenerator and jstransform. The fundamental problem was that transpilers do not compose  because if they both recognize language features that cause parse errors in the other, then you cannot use them together. Once we started adding early versions of Flow into the mix to get type checking (and Flow's parser recognized even less of ES6 than jstransform did), the problem became even worse. For a long time, in an individual file, we could have async/await or type checking, but not both.

To make matters worse, we also had to run a file-watcher service that would write the transpiled version of the code someplace where Atom could load it. We tried using a combination of gulp and other things, but all too often a change to a file would go unnoticed, the version on disk would not get transpiled correctly, and we would then have a subtle bug (this seemed to happen most often when interactive rebasing in Git).

It started to become questionable whether putting up with the JavaScript of the future was worth it. Fortunately, it was around this time that Babel (née 6to5) came on the scene. It did everything that we needed and more. I happily jettisoned the jstransform/regenerator hack I had cobbled together. Our team was so much happier and more productive, but there were still two looming issues:
  • Babel accepted a much greater input language than Flow.
  • It did not eliminate the need for a file-watching service to transpile on the fly for Atom.
Rather than continue to hack around the problems we were having, we engaged with the Flow and Atom teams directly. For the Flow team, supporting all of ES6 has been an ongoing issue, but we actively lobbied to prioritize to support features that were most important to us (and caused unrecoverable parse errors if they were not addressed), such as support for async/await and following symlinks through require/import statements.

To eliminate our gulp/file-watching contraption, we upstreamed a pull request to Atom to support Babel natively, just as it already had support for CoffeeScript. Because we didn't want to identify Babel files via a special extension (we wanted the files to be named .js rather than .es6 or something), and because (at least at the time), Babel was too slow to categorically transpile all files with a .js extension, we compromised on using the heuristic “if a file has a .js extension and its contents start with 'use babel', then transpile the file with Babel before evaluating it.” This has worked fairly well for us, but it also meant that everyone had to use the set of Babel options that we hardcoded in Atom. However, once Babel 6.0 comes out, we plan to work with Atom to let packages specify a .babelrc file so that every package can specify its own Babel options.

It has been a long road, but now that we are in a world where we can use Babel and Flow to develop Atom packages, we are very happy.

Node vs. Atom Packages

Atom has its own idea of a package that is very similar to an npm package, but differs in some critical ways:
  • Only one version/instance of an Atom package can be loaded globally in the system.
  • An Atom package cannot declare another Atom package as a dependency. (This somewhat follows from the first bullet point because if two Atom packages declared a dependency on different versions of the same Atom package, it is unclear what the right way to resolve it would be.)
  • Because Atom packages cannot depend on each other, it is not possible to pull in another one synchronously via require().
  • Atom packages have special folders such as styles, grammars, snippets, etc. The contents of these folders must adhere to a specific structure, and their corresponding resources are loaded when the Atom package is activated.
This architecture is particularly problematic when trying to build reusable UI components. Organizationally, it makes sense to put something like a combobox widget in its own package that can be reused by other packages. However, because it likely comes with its own stylesheet, it must be bundled as an Atom package rather than a Node package.

To work around these issues, we introduced the concept of three types of packages in Nuclide: Node/npm, Node/apm, and Atom/apm. We have a README that explains this in detail, but the key insight is that a Node/apm package is a package that is available via npm (and can be loaded via require()), but is structured like an Atom package. We achieved this by introducing a utility, nuclide-atom-npm, which loads the code from a Node package, but also installs the resources from the styles/ and grammars/ directories in the package, if present. It also adds a hidden property on global to ensure that the package is loaded only once globally.

Nuclide has many packages that correspond to UI widgets that we use in Atom: nuclide-ui-checkbox, nuclide-ui-dropdown, nuclide-ui-panel, etc. If you look at the implementation of any of these packages, you will see that they load their code using nuclide-atom-npm. Using this technique, we can reliably require the building blocks of our UI synchronously, which would not be the case if our UI components were published as Atom packages. This is especially important to us because we build our UI in Atom using React.

React

In July 2014, the Atom team had a big blog post that celebrated their move to React for the editor. Months later, they had a very quiet pull request that removed the use of React in Atom. Basically, the Atom team felt that to achieve the best possible performance for their editor, they needed to hand-tune that code rather than risk the overhead of an abstraction, such as React.

This was unfortunate for Nuclide because one of the design limitations of React is that it expects there to be only one instance of the library installed in the environment. When you own all of the code in a web page, it is not a big deal to commit to using only one version (if anything, it's desirable!), but when you are trying to create an extensible platform like Atom, it presents a problem. Either Atom has to choose the version of React that every third-party package must use, or every third-party package must include its own version of React.

The downside of Atom mandating the version of React is that, at some point, some package authors will want them to update it when a newer version of React comes out whereas other package authors will want them to hold back so their packages don't break. The downside of every third-party package (that wants to use React) including its own version is that multiple instances of React are not guaranteed to work together when used in the same environment. (It also increases the amount of code loaded globally at runtime.)

Further, React and Atom also conflict because they both want to control how events propagate through the system. To that end, when Atom was using React for its editor, it created a fork of React that did not interfere with Atom's event dispatch. This was based on React v0.11, which quickly became an outdated version of React.

Because we knew that Atom planned to remove their fork of React from their codebase before doing their 1.0 release, we needed to create our own fork that we could use. To that end, Jonas Gebhardt created the react-for-atom package, which is an Atom-compatible fork of React based off of React v0.13. As we did for the nuclide-atom-npm package, we added special logic that ensured that require('react-for-atom') could be called by various packages loaded by Atom, but it cached the result on the global environment so that subsequent calls to require() would return the cached result rather than load it again, making it act as a singleton.

Atom does not provide any sort of built-in UI library by default. The Atom UI itself does not use a standard library: most of the work is done via raw DOM operations. Although this gives package authors a lot of freedom, it also arrests some via a paradox of choice. On Nuclide, we have been using React very happily and successfully inside of Atom. The combination of Babel/JSX/React has facilitated producing performant and maintainable UI code.

Monorepo

Atom is developed as a collection of over 100 packages, each contained in its own repository. From the outside, this seems like an exhausting way to develop a large software project. Many, many commits to Atom are just minor version bumps to dependencies in package.json files across the various repos. To me, this is a lot of unnecessary noise.

Both Facebook and Google have extolled the benefits of a single, monolithic codebase. One of the key advantages over the multi-repo approach is that it makes it easier to develop and land atomic changes that span multiple parts of a project. For this and other reasons, we decided to develop the 100+ packages for Nuclide in a single repository.

Unfortunately, the Node/npm ecosystem makes developing multiple packages locally out of one repository a challenge. It has a heavy focus on semantic versioning and encourages dependencies to be fetched from https://www.npmjs.org/. Yes, it is true that you can specify local dependencies in a package.json file, but then you cannot publish your package.json file as-is.

Rather than embed local, relative paths in package.json files that get rewritten upon publishing to npm (which I think would be a reasonable approach), we created a script that walks our tree, symlinking local dependendencies under node_modules while using npm install to fetch the rest. By design, we specify the semantic version of a local dependency as 0.0.0 in a package.json file. These version numbers get rewritten when we publish packages to npm/apm.

We also reject the idea of semantic versioning. (Jeremy Ashkenas has a great note about the false promises of semantic versioning, calling it “romantic versioning.”) Most Node packages are published independently, leaving the package author to do the work of determining what the new version number should be based on the changes in the new release. Practically speaking, it is not possible to automate the decision of whether the new release merits a minor or major version bump, which basically means the process is imperfect. Even when the author gets the new version number right, it is likely that he/she sunk a lot of time into doing so.

By comparison, we never publish a new version of an individual Nuclide package: we publish new versions of all of our packages at once, and it is always a minor-minor version bump. (More accurately, we disallow cycles in our own packages' dependencies, so we publish them in topological order, all with the same version number where the code is derived from the same commit hash in our GitHub repo.) It is indeed the case that for many of our packages, there is nothing new from version N to N+1. That is, the only reason N+1 was published is because some other package in our repo needed a new version to be published. We prefer to have some superfluous package publications than to sink time into debating new version numbers and updating scores of package.json files.

Having all of the code in one place makes it easier to add processes that are applied across all packages, such as pre-transpiling Babel code before publishing it to npm or apm or running ESLint. Also, because our packages can be topologically sorted, many of the processes that we run over all of our packages can be parallelized, such as building or publishing. Although this seems to fly in the face of traditional Node development, it makes our workflow dramatically simpler.

async/await

I can't say enough good things about using async/await, which is something that we can do because we use Babel. Truth be told, as a side-project, I have been trying to put all of my thoughts around it into writing. I'm at 35 pages and counting, so we'll see where that goes.

An oversimplified explanation of the benefit is that it makes asynchronous code no harder to write than synchronous code. Many times, JavaScript developers know that designing code to be asynchronous will provide a better user experience, but give in to writing synchronous code because it's easier. With async/await, you no longer have to choose, and everyone wins as a result.

Flow

Similar to async/await, I can't say enough good things about static typing, particularly optional static typing. I gave a talk at the first mloc.js, “Keeping Your Code in Check,” demonstrating different approaches to static typing in JavaScript, and argued why it is particularly important for large codebases. Flow is a fantastic implementation of static typing in JavaScript.

Closing Thoughts

In creating Nuclide, we have written over 50,000 lines of JavaScript[1] and have created over 100 packages, 40 of which are Atom packages[2]. Our development process and modularized codebase has empowered us to move quickly. As you can tell from this essay (or from our scripts directory), building out this process has been a substantial, deliberate investment, but I think it has been well worth it. We get to use the best JavaScript technologies available to us today with minimal setup and an edit/refresh cycle of a few seconds.

Honestly, the only downside is that we seem to be ahead of Atom in terms of the number of packages it can support. We have an open issue against Atom about how to install a large number of packages more efficiently (note this is a problem when you install Nuclide via nuclide-installer, but not when you build from source). Fortunately, this should [mostly] be a simple matter of programming™: there is no fundamental design flaw in Atom that is getting in the way of a solution. We have had an outstanding working relationship with Atom thus far, finding solutions that improve things for not just Nuclide, but the entire Atom community. It has been a lot of fun to build on top of their platform. For me, working on Atom/Nuclide every day has been extremely satisfying due to the rapid speed of development and the tools we are able to provide to our fellow developers as a result of our work.

[1] To exclude tests and third-party code, I got this number by running:
git clone https://github.com/facebook/nuclide.git
cd nuclide
git ls-files pkg | grep -v VendorLib | grep -v hh_ide | grep -v spec | grep -e '\.js$' | xargs wc -l
[2] There is a script in Nuclide that we use to list our packages in topologically sorted order, so I got these numbers by running:
./scripts/dev/packages | wc -l
./scripts/dev/packages --package-type Atom | wc -l

413 comments:

  1. In this time of affectation, the author has composed each word with his entire being filled it.
    Life Hacks and Tips

    ReplyDelete
  2. Hi I was searching for the blogs for many times, now I have reached at the right place.Procore

    ReplyDelete
  3. Great and valuable information put in this blog, thank you so much for sharing this information with us. Visit OGEN Infosystem for responsive web design and SEO Service.
    SEO Service in Delhi

    ReplyDelete
  4. Appslure is a reputed company based in India which provide mobile app development company in mumbai. Our website's layout will be very attractive and responsive, which will gain more visitors and you can get high lead and business from your website. Wonderful post, This article have helped greatly continue writing ..
    Mobile app development company in mumbai

    ReplyDelete
  5. For assignment help, contact the Allassignmenthelp.com
    assignment writing service for students. Original, high quality assignments from top quality writers.
    do my assignment for me

    ReplyDelete
  6. Looking for a reliable online writing service provider in the U.S.A? If yes, then you are on the right platform to receive the best Assignment Help at an affordable price. We are providing remarkable academic writing services for the past many years to resolve students’ concerns. This Online Assignment Help service allows students to discuss their concerns with qualified Assignment Expert and finish their assignment on time.

    ReplyDelete
  7. Wow!!! It was really an Informational Article which provide me with much Insightful Information. I would like to first thank the author for such an Insightful Content. If someone here is looking for a Website Designing Company in India, then look no further than Jeewangarg.com as we are the best website designing company in Delhi working in the arena for the last 8 years.
    website designing company in India
    website designing company in NCR
    Google Partner in India

    ReplyDelete
  8. Wow!!! It was a great blog with so much information of the beautiful places to visit. If anyone out there is looking for shimla manali tour package | kerala tour packages , reach out to Indian Travel Store and book your best tour package.

    ReplyDelete
  9. When students help in online search they find the cost of essay writing very high. But at allassignmenthelp.com, we provide the best quality essays from students at low charge.
    do my essay

    do my essay online

    ReplyDelete
  10. Thanks for the great article and post. Need a Industrial UPS? Don’t go beyond nexusups. “A popular Industrial UPS which offers an extensive range of exceptional Industrial UPS, and Online Online UPS Free to contact.

    ReplyDelete
  11. Thanks for the great article and post. Need a servo voltage stabilizer manufacturers in india? Don’t go beyond servo star “A popular Servo Voltage Stabilizer which offers an extensive range of exceptional servo stabilizer. Feel Free to contact.

    ReplyDelete
  12. Writing essays can be both time consuming and hectic. This is why most students hate the task. If nothing else is constant in your life, essay writing is what will take the place. MyAssignmenthelp.com has the best essay writing service for you. If you cannot perfect your papers or don’t know how to write a winning essay, then our service is what you need.

    uk essays help
    essay writing service
    essay typer

    ReplyDelete
  13. This comment has been removed by the author.

    ReplyDelete
  14. I am really impressed through reading this post and urge its writer team to share same level information. Take the association of Assignment Help team as you are in the compulsion to create assignment on committed time to your college professors.
    Assignment Help Online
    Best Assignment Help
    Assignment Helper
    Assignment Help In USA
    Online Assignment Help
    Assignment Help Experts
    Online Assignment Help Services

    ReplyDelete
  15. The popularity of MA psychology course in India is increasing day by day in India and now number of students is opting for this course. Ignou University is one of the famous University for psychology. The subject code for ma psychology in Ignou is MAPC. The student need to complete the degree must clear the Ignou mapc project. Ignou synopsis offer ma psychology project to all the student who need help.

    ReplyDelete
  16. Nice blog, it's so knowledgeable, informative, and a good-looking site. Myassignmenthelpau is a great platform that has been performing astonishingly well. If yes, then you are on the right platform to receive the best Assignment writing services at an affordable price. They provide transparent and trusted work satisfying universal clientele each year.

    ReplyDelete
  17. Nice blog, it's so knowledgeable, informative, and a good-looking site. Myassignmenthelpau is a great platform that has been performing astonishingly well. If yes, then you are on the right platform to receive the best Buy Assignment Online at an affordable price. They provide transparent and trusted work satisfying universal clientele each year.

    ReplyDelete
  18. I get all the information from your blog. Keep sharing this type of blog reguarly.If you are looking for assignment help in UK, Then you can contact us:- cs@abassignmenthelp .com

    ReplyDelete
  19. Excellent information Providing by your Article, thank you for taking the time to share with us such a nice article. Amazing insight you have on this, it's nice to find a website that details so much information about different artists. Kindly visit the LiveWebTutors website we providing the best assignment help services in Australia.

    For More Info:
    My Assignment Help

    ReplyDelete
  20. Thank you for this wonderful information looking forward for more. We are providing the best quality online assignment help. There are professional experts from various esteemed universities in almost every field. Well if you get time you must read more
    programming help
    online assignment help
    do my assignment
    Assignment Writing Help
    assignment help Singapore
    assignment help Canada
    assignment help Ireland
    assignment help New Zealand

    ReplyDelete
  21. Assignment Help Online is the online administration where students can get full learning in any scholastic session. The points are performed by the prerequisite of students as it were.
    Accounting Assignments Online
    Digital marketing assignment writing
    Sociology assignment help

    ReplyDelete
  22. I suggest all members choose My Assignment Help Australia for the best guideline in your academia. The perfect and expert assistant your requirement and learning assignment project by the university.

    ReplyDelete
  23. Plumbers Near Me would give services while keeping in mind the professional norms of this industry. Customers can rely on Plumbers in my Area for all type of services that they may require.

    ReplyDelete
  24. The synopsis or proposal is your opportunity to impress your teacher or supervisor and lay the preparation for a well-constructed project. Before beginning your project, you have to demonstrate you've selected a viable subject to write about. Second, your dissertation requires a skilled specialist to mark this, and thus the synopsis provides a 'snapshot' of your suggested subject and permits them to assign the right supervisor

    ReplyDelete
  25. Your article is so convincing that I never stop myself from appreciating this. Thank you for posting this. If you are looking for Assignment Help online services and if you want to boost your marks without putting your efforts. If you have time issues, do contact online assignment writing service provider and receive the best assignments as per your job requirements.
    Online Assignment Help
    Assignment Help Online

    ReplyDelete
  26. Get help for all makes and models of Hearing Aids. Dial us for professional and educated service for Best Hearing Aids for you and your dear ones.

    ReplyDelete
  27. Get connected with the experts in an instant by dialling British Airways Phone Number and get to know about flight tickets bookings, status, schedule, booking procedure, offers, deals, services and many more. Travel the world in comfort and in luxury without paying a hefty amount. Save more by booking with us!

    ReplyDelete
  28. Get your booking with American Airlines Phone Number and get the best deals. You can book your fares over a call and as per your specifications without any hassle or paperwork. Read on to know all about us and the services we offer.

    ReplyDelete
  29. You will get the solution related to Air China Airlines without any hold time or waiting. The assistance available here is 24X7 and solution is guaranteed. Just enjoy a great trip and fly wherever you wish the freedom of our services. If you are looking for an authentic and quick gateway for Air China Customer Service, you can call us on our helpline number.

    ReplyDelete
  30. You can arrange many more things with us. For instance, having your specific meal, having the bags checked, prior checking and carrying the first two for free and so much more. Just ask us what you need from the experts that are always at your service call us anytime at Air China Phone Number.

    ReplyDelete
  31. Thank you for organizing such wonderful info. Students can now make their life easy and hassle-free by opting Assignment Help service from Assignment provider AUS. It is one stop gateway for success in the academic field. You can ask for aerospace engineering assignment help online. We will make it for you at affordable price.

    ReplyDelete
  32. Hacking on Atom Part II: Building a Development Process so interesting.Nice information, valuable and excellent design, as share good stuff with good ideas and concepts.We provide best services Ecommerce Website Development Dubai for your product you visit more details.

    ReplyDelete
  33. Excellent and decent post. I found this much informative, as to what I was exactly searching for. Thanks for such post and please keep on sharing with us.The Carpet Dry Cleaning Dubai provide best cleaning service you visit more info.

    ReplyDelete
  34. Excellent Post, Positive site, your article is so helpful for readers, who are feeling stress for his assignment. You can contact UK Assignment Helpservices. Here is a team of expert writers ready to giving you their services at a low cost.

    ReplyDelete
  35. Reserve your tickets and get ready to witness the beauty of these places. You can easily avail deals and discounts on Los Angeles To Seattle Flights.

    ReplyDelete
  36. Great I found informative content Keep up the good work and keep sharing awesome information like this.
    Nursing Assignment Help Online
    Macroeconomics Homework Help

    ReplyDelete
  37. Some people also feel the urge of staying close to their parents to take care for them. content writing services

    ReplyDelete
  38. I love it when people get together and share views. Great site, Eunidrip company has wealth of experience in drilling boreholes. Our aim is to provide quality, clean water and boreholes that can be well maintained and long lasting. We are a Class “A” water contractor certified by the Ministry of water and Irrigation. Greenhouse Construction in Kenya for more.

    ReplyDelete
  39. The word building is both a noun and a verb: the structure itself and the act of making it. As a noun, a building is 'a structure that has a roof and walls and stands more or less permanently in one place. Mobile App Development Dubai are the best in town providing best quality apps, which users require.

    ReplyDelete
  40. Myassignmenthelp offers customized and unique assignment help through actual professionals. Our team of PhD. certified experts strive to meet students’ expectations along with University guidelines to ensure high scoring assignments every time. Along with adept writing help we offer professional proofreading, editing, free samples and exam help to assist students in achieving their career aspirations.

    ReplyDelete
  41. ABC Assignment help is the finest assignment help company offering reliable assistance to students across the globe. Our team of subject-specific writers are available 24x7 with their expertise, experience and dedication to provide professional academic writing service for assignments, essays, coursework and more.

    Read More - Rhino Assignment Help

    ReplyDelete
  42. Thank you for bringing to a halt my long search topic. I really benefited from your content. If you are experiencing trouble striking a balance between your busy academic life and handling your online classes, you can get help from a professional who will take online classes on your behalf. It doesn’t matter the kind of help you need, whether it is passing your exam, finishing your assignments or even the entire classwork, you can get help here at Online Class Help .

    ReplyDelete
  43. The shortcut to demonstrating a strong passionate about analytics is to cultivate some genuine interest in data. If you're serious about a job with data, go the whole hog and evolve into a numbers person.

    ReplyDelete
  44. csv to vcard online is a free contacts file converter, it can convert contacts files in CSV format to vCard files. The usage is simple, click the button "Browse" to select a contacts file

    ReplyDelete
  45. Very nicely explained and include all important information.I also recommend visiting mobile app development company

    ReplyDelete
  46. How To export exchange 2003 mailbox to pst files. Run the exmerge.exe and select the option for a two step procedure and select the users to export the mailboxes. You are done!

    ReplyDelete
  47. Siddharth Shukla is an Indian television actor. He is primarily known for his work in a small screen and Bollywood industry.

    ReplyDelete
  48. Get the best expert advice for physics assignment help online. our assignment is plagiarism-free, reliable and mistake-proof. we ensure you quality assignment help service.
    Visit our website: Physics Assignment Help

    ReplyDelete
  49. If you want to know about the Best Time to Book Flights, reach to our customer care and clear all your worries. Get ready to buy airline tickets with us!

    ReplyDelete
  50. https://getassignmenthelponline.com is the world's best online assignment services provider They do not make empty promises, always achieved what they promised. So you can take help with any academic consultation or Assignment Help . Our team of online get assignment help online is always ready to cater to your needs at any given moment.

    ReplyDelete
  51. If you are eager to travel with Spirit Airlines Book A Flight, then contact our Experts. Our experts are available 24/7 at your service.

    ReplyDelete
  52. If you are facing problems with your televsion, Best Buy TV Repair team can help you 24/7. We provide assistance for all the models. Contact 24/7.

    ReplyDelete
  53. In these difficult Coronavirus situations, Qatar Airways Flights is offering flight change flexibility with its option. Read more to know about flight flexibility.

    ReplyDelete
  54. The operation of Qatar Airways Flights is still going in Coronavirus situations. However, Qatar Airways is offering flight change flexibility. Read Now!!

    ReplyDelete
  55. I think this is one of the best blog for me because this is really helpful for me. Thanks for sharing this valuable information for free...
    packers and movers in dhanbad

    ReplyDelete
  56. Flight reservation is never easier than before! Experience Book a Flight With Southwest Airlines experience with us. From deals to 24/7 help we got you covered!

    ReplyDelete
  57. Air Canada Airlines Flights is the choice of millions but are you aware of everything related to Book A Flight With Air Canada Airlines. Find out!

    ReplyDelete
  58. Assignment Help is the good of getting academic writers' assistance amid of coronavirus pandemic in which we have to avoid physical contact. Stay at home and be healthy using online academic writing services for project submission in Australia.
    My Assignment Help
    Assignment Help Online
    Online Assignment Help

    ReplyDelete
  59. Get help with Termite Control services. You can visit our website and contact the agents for other Pest Control. They will reach you instantly.

    ReplyDelete
  60. HP devices because technical issues are common to every digital electronic device. Visiting www.support.hp.com is one of the best options to get immediate solution for your HP device. You will find most of the solution for your HP device there.

    ReplyDelete
  61. Anyone can attempt writing on your behalf, however, the question is would you pay someone to do it for you without checking their credibility? Our firm has established itself as the most trustworthy assignment help online firm in Australia and globally. Join these thousands of students and achieve high distinction in each and every one of your college tasks. This is the main reason why most students search for onlineassignmenthelpaustralia over the internet and choose only the most proficient and trusted academic writing experts. So, if you are searching for quality brisbane assignment help you can find it right here from the local experts.

    ReplyDelete
  62. Thanks for sharing such nice information.
    Get the best expert advice for Competitive Strategy assignment help online. our assignment is plagiarism-free, reliable and mistake-proof. we ensure you quality assignment help service.
    Visit our website: Competitive Strategy Assignment Help

    ReplyDelete
  63. If you don’t have ideas on How to update Garmin GPS unit, our Garmin professionals are fully loaded with high skills for updating your unit in the right ways.

    ReplyDelete
  64. Many laptop users complain about the laptop microphone not working problem on their laptops. It is true that without the proper Microphone functionality, there are countless tasks that can’t be completed and users experience gigantic inconvenience by this technical glitch on my laptop. This case is also happening with my laptop. From a long time, I am hardly experiencing laptop microphone not working
    problem. This technical issue is really a big hurdle for me. There can be unexpected several causes behind this error. So please anyone can provide the solid ways to solve this issue

    ReplyDelete
  65. Want to make changes or cancel the flight of American Airlines, but confuse how to do it? Get all reliable information about American Airlines Manage Booking here.

    ReplyDelete
  66. Flight reservation is never easier than before! Experience Book a Flight With Southwest Airlines with us. From deals to 24/7 help we got you covered!


    ReplyDelete
  67. Review and manage your bookings with the help of United Airlines Manage Booking helpdesk for hassle-free travelling experience.

    ReplyDelete
  68. I am a web developer and software engineer currently living in the United States. My interests range from technology to entrepreneurship. I am also interested in web development, programming, and writing.
    office.com/setup
    www.office.com/setup
    www.office.com/setup
    office.com/setup

    ReplyDelete
  69. Finish your academic tasks using assignment help services. Boost your knowledge as well as your marks using online assignment help Kuwait by paying a hefty amount for it.
    Assignment help
    Assignment help

    ReplyDelete
  70. It is extremely great to see the excellent details presented in an easy and understanding manner.
    analog electronics assignment

    ReplyDelete
  71. Greetings! This is my first visit to your blog!

    Your blog provided us useful information to work on.
    You have done an extraordinary job!

    You can also find In fieldengineer.com freelancers for telecom and networking mutual assistance
    http://www.fieldengineer.com is a Global Marketplace which connects businesses and field engineers in telecom industry. The Fastest Growing Startup with a Global Workforce in 175 Countries. We have cu rrently 40000+ engineers signed up worldwide
    Read More: Microsoft Office Specialist

    Computer Network Support Specialists

    ReplyDelete
  72. Really very happy to say, your post is very interesting to read. I never stop myself to say something about it. You’re doing a great job.Keep it up
    office.com/setup

    ReplyDelete

  73. It is a great post. Till the year 2017 all unpaid and unclaimed dividends that have not been encashed for the past 7 years from the dividend declaration date may be transferred to a separate account maintained by IEPF.

    ReplyDelete
  74. Your post is very helpful and information is reliable. I am satisfied with your post. Thank you so much for sharing this wonderful post.
    office.com/setup

    ReplyDelete
  75. Fly with the best in-flight amenities that Southwest Airlines Flights offer. Speak to our Southwest Airlines Book A Flight helpdesk for instant booking.

    ReplyDelete
  76. HP devices are mostly used in work places as well as in homes to compete daily tasks. HP Support Assistant is one of the best utility software mainly designed for Window OS. You can download HP assistant software to easily manage HP devices.

    ReplyDelete
  77. Modify your journey details according to your new itinerary with Hawaiian Airlines Manage Booking service. So change your details as per your requirements.

    ReplyDelete
  78. I am making proper use of QuickBooks for maintaining the daily based accounting entries in the proper ways. QuickBooks is extremely useful for all kinds of businesses. QuickBooks is really great software that has become the first choice of business people. When I attempt to open QuickBooks, I am experiencing QuickBooks not Opening error. This error has turned out to be a big hurdle for me, so I want to take instant help from certified QuickBooks professionals. I don’t know exactly what are the actual reasons of this error? So anyone can suggest the appropriate methods to sort out QuickBooks not opening error.

    ReplyDelete

  79. If you face any issue during software downloading and installation, contact our helpdesk for Samsung Printer Setup. We are available 24/7. Call now.

    ReplyDelete
  80. Borrow Assignment Help  to finish your homework on time even if you are studying in New Zealand universities. Pay a reasonable price and complete your academic papers without compromising your leisure time and part-time occupations.
    Assignment Help Online Online Assignment Help

    ReplyDelete
  81. Great Hacking on Atom Part II: Building a Development Process you sharing.I think this is definitely an amazing project here. So much good will be coming from this project. The ideas and the work behind this will pay off so much. I am very happy to see your blog. You did a great job and thanks for sharing.We provide best services Ecommerce Website Development Dubai for your product.

    ReplyDelete
  82. While printing the important documents through my HP printer, my HP printer is showing HP printer in error state. This error code is displaying due to many reasons. But I am new to this technical glitch, so I don’t have complete skills for rectifying this error immediately. I think that it means that the printing machine is not in the active mode. Really, it is very difficult situation for me. I try to apply my technical resolutions for fixing it. Can you recommend the simple methods to fix HP Printer In Error State?

    ReplyDelete
  83. assignment help that ensures that you meet the deadline every time. It is important that the assignments are written in a way that all the questions asked by your professor are answered and all the objectives are fulfilled. Our subject experts make sure that we do not deviate from the actual context of the assignment and provide the best possible solution without charging an exorbitant amount. Our fair pricing and discounts make our services even more accessible and the best choice when availing the online assignment help in Australia. We consider it a sign of discipline to meet the deadline and submit top quality work within the designated time limit. The subject experts at assignment work help deliver the required output to meet the expectations of our clients every time and make sure that you get good marks for every assignment.
    online assignment writing help
    assignment solution australia
    best assignment help australia
    online assignment help
    best assignment help
    assignment work help usa
    assignment work services asutralia

    ReplyDelete
  84. Take Assignment help services in Saudi Arabia if you want to get desired outcomes. When you have to do in a single day, finish your assignments using experts’ assistance via Online Assignment help Saudi Arabia. Well if you get time you must read more
    assignment help
    online assignment help

    ReplyDelete
  85. Microsoft office.com/setup
    comprises a bundle of useful applications and services, each created for individual usage. Visit office.com/setup to get the Microsoft office Suite on your device,Step-by-Step guide for Office setup , Download & complete installation from office.com/setup. We are provide independent support if you face problem to activate or install Microsoft office product. visit office.com/setup Step-by-Step guide for Office – Activate, Download & complete installation from office.com/setup We are provide independent support if you face problem to activate or install Microsoft office product.

    ReplyDelete
  86. Tired of searching the Local Plumbers Near Me? Well, if you are still searching then, call us at our toll-free number to get best plumbers in your area.

    ReplyDelete
  87. If you want to install McAfee antivirus through mcafee.com/activate, you can call live antivirus professionals to get full guidance for it. Our antivirus experts have the great skills for installing McAfee antivirus through mcafee.com/activate product key. Our helpline number is the suitable option for you to get instant support or quality help.

    ReplyDelete
  88. Is running water from taps annoying you to the core? Don’t search for 24 Hour Plumbers Near Me on the web; we are there for you to provide you our support.

    ReplyDelete
  89. Avail best Textbook Solutions for your any academic issue. The top experts are available for the help.

    ReplyDelete
  90. If you ever locked in a situation where you left the key in the door? If yes then give a call to Emergency LockSmith Near Me. We are available 24/7.

    ReplyDelete
  91. There are many people who are trying to leave drugs, alcohol, and other addictive products. If you really want, contact us for Rehab Centers Near Me.

    ReplyDelete
  92. HP printers are used world widely to complete printing and scanning task. Wi-Fi protect setup is one to the ways to connect a printer device to the wireless router. If you are unable to find WPS Pin on your HP printer to establish connection then get help from experts.

    ReplyDelete
  93. When you book with Qatar Airways, you have the world at your fingertips. Find special services through Qatar Airways Manage Booking and book whenever you want.

    ReplyDelete
  94. If you have any query related to download, installation and setup of Panda security then contact Panda Support. Certified experts are available round the clock to help customers to secure their systems.

    ReplyDelete
  95. I recently booked my ticket through American Phone Number . And let me tell you that it was a pleasant flight to fly with American Airlines. Talking on American Phone Number provided me with the necessary information to cancel the ticket. Look forward to flying with them again!

    ReplyDelete
  96. What can I say? The experience of travelling with Lufthansa Airlines was very fabulous. I got my every solution here. When I connected with experts by dialling Lufthansa Airlines Customer Service then finally I got the flight tickets with best facilities within my budget. I would like to advice everyone to travel with them.

    ReplyDelete
  97. If you are facing any type of flight-related issues and searching for a reliable source for instant solutions, contact Qatar Airways Reservations Phone Number. Our travel experts will positively serve you with good solution services. So do call us once to get the best answer to any problem regarding flight ticket bookings like seat availability, flight status or flight time.

    ReplyDelete
  98. Hey! Thanks for providing such genuine information in simple sentences. I was longing to get it for a long time! Well, I’m a booking manager in Lufthansa Airlines. If you have set your mind to cancel your flight tickets due to the present lockdown kind of situation, then directly contact me for the instant and easy Lufthansa Airlines Cancellation.

    ReplyDelete
  99. We have focused on providing the most suitable solution to the common AOL Gold Problems
    . We have listed down some of the problems along with their solution in a step by step manner.

    ReplyDelete
  100. I tried to avail the services at United Airlines and also got the best experience. With the easy procedures of cancelling a flight ticket when talking United Airlines cancellation number, I got to travel and enjoy myself to make my trip hassle free. Thank you for this experience!

    ReplyDelete
  101. I really admire your hard-work in bringing out such important information in user-friendly ways. Your website is almost every-time, the solution of my every query. Well, Hey! I work with Spirit Airlines Cancellation team, if at any point in time you want to cancel your flights, then do contact me for the fast, easy and hassle-free process.

    ReplyDelete
  102. Hey! I’m a regular visitor of your website because of your useful information that I got every single time. There is something special about you that bounds me to your website. By the way, I work in Allegiant Airlines. Considering the current situations of the world, if anyone wants to know about the Allegiant Airlines Cancellation, and its process, they can directly contact me. I will be more than happy to help you out!

    ReplyDelete
  103. If you are in a hurry or need urgent help, you can go to 123.hp/setup page. Here you will receive the updated process for the setup procedure. In case, do not have much time to read and then apply, then you can choose the second option i.e. the technical expert help. You will have to contact the professionals and ask for help. Well, this option is easier and the users will get the solutions directly and they just have to follow it. Thus, follow the instructions as they guide you. Furthermore, provide the correct details regarding your HP printer to the professionals to get an accurate solution. The service is available throughout day and night, 24*7.

    ReplyDelete
  104. Get your hands on installing and processing Dell activation without any errors and interruptions. All you need is to dial Help number USA for the Dell activation process. You can get the help and assistance for HP and Dell activation without any errors.

    ReplyDelete
  105. office.com/setup

    Microsoft releases security and quality upgrades for the Click-To-Run (C2R) Setup of Office 2019 via office.com/setup, which is exclusively C2R. These upgrades are released approximately once a month, generally on the second Tuesday of the month.

    ReplyDelete
  106. If you find that the locks giving you an issue in locking or opening, you can call to Commercial Locksmith Near Me to get best help. We are available 24/7.

    ReplyDelete
  107. Norton.com/setup – Everyone wants to protect their device from cyber-attacks and internet malicious sites and programs. If your device contains your private and banking information then your data should be well secured by reliable security software. When it comes to antivirus programs, then Norton comes into our mind.
    norton.com/setup

    ReplyDelete
  108. Do not worry about your dumb printer! Get instant HP Printer Offline services from our experts. Get in touch with us and enjoy the solution.

    ReplyDelete

  109. Get quick solutions for HP Laptop and also find steps to download HP Laptop Drivers. Call HP Laptop Support Phone Numberto avail online technical Help.

    ReplyDelete
  110. NobleQQ - Situs Poker Online Server GLX Terbaik dan Terpercaya di Indonesia Dijamin Aman dan Terpercaya
    CS 24/7 Online WA +855 1090 3838

    Promo 20rb GRATIS yuk buruan hanya di AGEN POKER ONLINE new member diberi 20k skuyy wa :+85510903838

    ReplyDelete
  111. If your printer is failing to print the correct colors then this is because you need to check whether the ink of that color is finished. If yes, then refill the color. If then you need are facing the issue you need to connect to the expert professionals. The experts are having knowledge of how to tackle these issues. They will give you the proper guidance and make sure your issue is resolved. The solution by the professionals is permanent and you may not face it again in the future.
    hp Printer not printing color

    ReplyDelete
  112. Crazy Artist from Tampa. I am a professional visual designer. I love to explore new stuff everyday and abstract is one such thing. Do follow my illustrations here: Roku account login | Roku/link | my roku account | Roku account

    ReplyDelete
  113. Utility software are very important for PC and printer devices to manage them easily. HP offering HP Assistant software to their device users to manage them. You will get latest update for your device with the help of HP assistant software.

    ReplyDelete
  114. Use your printer smoothly with our Wireless Printer Offline services. We are there to solve all your issues quickly and instantly all the 24/7.

    ReplyDelete
  115. Want to make changes or cancel the flight of American Airlines, but confuse how to do it? Get all reliable information about American Airlines Manage Booking here.

    ReplyDelete
  116. Call at Auto Locksmith Near Me and one of our professional automotive locksmiths will be there to manage your lock-related requirements. Call now!!

    ReplyDelete
  117. Gmail users always take it for granted, until it is gone. Are you facing gmail problems
    ? Is your Gmail is not working? Well, it won’t work properly until you don’t fix it. But how?

    ReplyDelete
  118. Following guidelines will help you to activate PBS using PBS activation code:

    1.At first, you must navigate to the channel store of the streaming device. 
    2.After that, look for the PBS app among the popular streaming services. 
    3.Or else, type the app’s name in to the find bar and wait for the results 
    4.Secondly, get the PBS app from the result and then check for channel info. 
    5.Moreover, select the Download option to get the app. 
    6.Similarly, once after the installation, get back to the home screen and open the app. 
    7.Now, you can see the PBS activation code on the TV screen. 
    8.Note this code, and you must open a web browser on a computer device. 
    9.Using the browser, reach pbskids.org/activate.
    10.In there, you must enter the code for activation to begin the activation process. 
    11.Finally, sign in with your PBS account to complete it. 
    12.If you don’t have an account, then make sure to create one.

    Talk to our executive support squad at +1-844-879-5200 for further info about pbskids.org/activate.

    ReplyDelete
  119. Accounting assignment help is the best way to solve your questions using the assistance of professional academic writers. It is two-way communication in which you share your project requirements and writers work on it to lowering your stress.
    Finance assignment help
    capital budgeting assignment help

    ReplyDelete
  120. If your canon printer is not printing the needed documents, you can call our technical support team immediately. If your canon printer is passing through some technical faults, our trained troubleshooting experts are technically known for rectifying canon printer not printing issue immediately. As a reliable third party tech support provider, our dedicated and certified technical experts are technically experienced and fully knowledgeable to sort out canon printer not printing issue. Our canon printer troubleshooting experts are comfortably available at our helpline number to deliver instant technical resolutions for any type of technical troubles.

    ReplyDelete
  121. If you need to activate the AMC channel on the Roku device, you need to open the Roku channel store and search for the AMC channel on the movies and tv section. You need to download and launch the AMC channel on the Roku device. You need to open the channel app and generate the activation code. Note the code and surf to the amc.com/activate site and provide the code on the site. Provide the tv provider details and activate the channel. For more details on the amc.com/activate, get in touch with our expert team, and resolve the issues.

    ReplyDelete
  122. I have taken the effective resolutions from roadrunner number to sort out roadrunner email not working issues. So, I am looking for quick technical support from roadrunner support phone number to resolve roadrunner email not working problems.

    ReplyDelete

  123. HP Printer setup is easy and here is the setup guide. Find the slot to fix the hardware. Select the appropriate network settings. If HP is your choice, wireless setup wizard is recommended. After connecting the printer to the network, find the software visiting the appropriate software download page. Now proceed with the remaining setup steps. Get help and support to start HP Printer setup. Dial the support number +1-800-237-0201 and wait for the agents to contact you or visit our site 123.hp.com/setup

    ReplyDelete
  124. If you ever locked in a situation where you left the key in the door? If yes then give a call to Emergency LockSmith Near Me. We are available 24/7.

    ReplyDelete
  125. How to Activate TNT Drama Channel Activation
    @ Select the device for channel activation
    @ If your streaming device is brand new, execute the language and display settings
    @ Visit the appropriate settings to activate the Network
    @ Select the option, wireless
    @ Now move to the channel store
    @ Start the channel search typing the channel name
    @ You will receive the search results as you start
    @ Tap on the option, Add channel
    @ The very next is to click on the channel activation URL, Tnt drama.com/activate
    @ As you click on the page, you may receive a prompt to type the activation code
    @ Carry on with the activation steps to complete the process
    For tntdrama.com/activate, use the toll-free number +1-844-608-1510. We have a team of experts to guide you round the clock.

    ReplyDelete
  126. If you are searching for someone for your Printer Setup, then we assure you that we are always available for you. You can reach us at any time.

    ReplyDelete
  127. My job is to send the business proposals to the domestic and global clients, so I rely on yahoo mail services. I want to understand IMAP settings for my yahoo emailing services. I don’t have ideas about yahoo imap settings. Can anyone have the relevant answers for yahoo imap settings?

    ReplyDelete
  128. Your post is very helpful and information is reliable. I am satisfied with your post. Thank you so much for sharing this wonderful post.
    office.com/myaccount

    ReplyDelete

  129. This is a great blog posting and very useful.SEO Expert Dubai

    ReplyDelete
  130. Assignment Help Hong Kong is the best option to complete academic papers without any stress. If you don’t want to degrade your academic performance, make sure to connect with the professional service provider of assignment writing help.
    Assignment Help Online
    Online Assignment Help

    ReplyDelete
  131. College essay writing service writing is not so easy for Singaporean students and thats why students of national university of Singapore have faith on singaporeassignmenthelp.com. Our writing experts are graduate from top universities of singapore and they how to complete error less and plagiarism assignment for students for their academic growth.

    ReplyDelete
  132. Garmin.com/express Garmin.com/Express Download Garmin Express To Install & Manage Garmin Updates For all Garmin Devices With Easy Instruction by visiting garmin.com/express.

    ReplyDelete
  133. Mywifiext Mywifiext.net Login, Follow the step by step guidelines for Mywifiext.net Login, account setup and configure your Netgear Extender to experience seamless connectivity.

    ReplyDelete
  134. TurboTax LoginTurboTax Login - Now you may Sign in to Your TurboTax Online account to start, continue, or amend a tax return, check the e-file and many more

    ReplyDelete
  135. Rand Mcnally Dock Update Rand McNally is a world-leader in providing GPS based Navigation Devices. Its innovative product range covers the diverse needs of various users. These intuitive, user-friendly devices are designed to eliminate stressful navigation out of your travels. However,

    ReplyDelete
  136. office.com/setup office.com/setup - For Office Setup and Activation go to www.office.com/setup and get started with activation and installation by entering product key.

    ReplyDelete
  137. Garmin Express Garmin express - Register, update and sync your device with Garmin. Manage devices from your desktop. Garmin Express is a computer application.

    ReplyDelete
  138. Magellan Gps Update Magellan Gps Update is a prominent portable GPS navigation consumer electronics company. To take the benefits of the Magellan GPS device, the users have to install and get the latest Magellan GPS updates. Through the GPS Magellan updates, the user can have an up-to-date version of the GPS device. In the year 1986, the company was established, and the Head Quarter is in San Dimas, California.

    ReplyDelete
  139. Confused which phone to buy after this coronavirus is over. - Checkout Our List Of
    Samsung Upcoming Phones

    Doing Good work. Keet it Up - Checkout Our List Of
    Mi Upcoming Phones

    Best external ssd for gaming

    best gaming phone under 20000

    Mi 11 Pro

    best gaming phone under 15000

    Redmi 10X

    ReplyDelete
  140. Do not worry about your dumb printer! Get instant HP Printer Offline services from our experts. Get in touch with us and enjoy the solution.

    ReplyDelete
  141. Some of us may face technical issues with our HP device and there is no technical person available at home. So contact HP Supportto grab online technical help from certified experts.

    ReplyDelete
  142. I appreciate the time you’ve taken out to show me the ropes and ensure that I have the required knowledge to do a great job. Thank you.
    raed more

    ReplyDelete
  143. Good post.Thanks for sharing with us. If you are looking flights ticket in your budget then visit at Airlines Fare Calendar which gives you the way to find cheap airlines airfares for your preferred tour and travel needs. We have Fare Calendar as another great way to achieve the best for you.

    ReplyDelete
  144. Are you getting errors with you Dell Printer Setup? Just dial our toll-free number. Our helpdesk technicians are certified and capable to assist you. Call Now!!

    ReplyDelete
  145. you solve spam filtering issues, file attachment issues, or configuration issues on your device. Additionally, the RoadRunner customer service
    will provide you all the possible solutions with account recovery or sign-in issues, server related problems or email contacts sync issues.

    ReplyDelete
  146. Our Contract Law Assignment Help is supported up by learned essayists who ensure 100% unique work. Each Contract law assignment and exposition experiences three checks – after composing, altering and editing utilizing literary theft checker – valid unoriginality recognizing programming. In this way, you can be guaranteed of a literary theft free arrangement each time you submit a request.
    Contracts Law Essay Assignment
    contract law essay
    contract law assignment help
    contract law dissertation
    contract law coursework
    contract law expert
    contract law Australia

    ReplyDelete
  147. Due to COVID 19, Etihad Airways offering flexibility in its flight change or cancellation policy, to modify visit Etihad Airways Manage Booking.

    ReplyDelete
  148. I found this is an informative and interesting blog so I think so it is very useful and knowledgeable. I would like to thank you for the efforts you have made in writing this blog.
    write assignment in english

    ReplyDelete
  149. I hope that you continue to embrace your creativity and utilize it in your work for as long as possible.
    read more

    ReplyDelete
  150. Due to COVID 19, Etihad Airways offering flexibility in its flight change or cancellation policy, to modify visit Etihad Airways Manage Booking.

    ReplyDelete
  151. Halo, Bingun cari situs Agen judi online Taruhan terpercaya.? YUK GABUNG DI BINTANG BOLA YANG MENYEDIAKAN BERBAGAI JENIS TARUHAN
    -> SBO
    -> IBC
    -> JOKER
    -> TOGEL
    Bintang Bola juga memberikan bonus:
    -> Cash Back 10%
    BINTANG BOLA
    WhatsApp: +855-81-287-168
    Live Chat 24.JAM

    ReplyDelete
  152. This comment has been removed by the author.

    ReplyDelete
  153. Very informative blog.If you want to Translate Chinese to English document then you should mail us info@singaporetranslators.com .We deliver you 100% exact translation in short turn around.

    ReplyDelete
  154. This comment has been removed by the author.

    ReplyDelete