Facility Description Profile. Facility Description Profile Template To Be Used When: Fill & Download for Free

GET FORM

Download the form

How to Edit The Facility Description Profile. Facility Description Profile Template To Be Used When easily Online

Start on editing, signing and sharing your Facility Description Profile. Facility Description Profile Template To Be Used When online with the help of these easy steps:

  • click the Get Form or Get Form Now button on the current page to direct to the PDF editor.
  • hold on a second before the Facility Description Profile. Facility Description Profile Template To Be Used When is loaded
  • Use the tools in the top toolbar to edit the file, and the change will be saved automatically
  • Download your modified file.
Get Form

Download the form

A top-rated Tool to Edit and Sign the Facility Description Profile. Facility Description Profile Template To Be Used When

Start editing a Facility Description Profile. Facility Description Profile Template To Be Used When now

Get Form

Download the form

A clear direction on editing Facility Description Profile. Facility Description Profile Template To Be Used When Online

It has become very simple lately to edit your PDF files online, and CocoDoc is the best free PDF editor for you to make some changes to your file and save it. Follow our simple tutorial to start!

  • Click the Get Form or Get Form Now button on the current page to start modifying your PDF
  • Add, modify or erase your content using the editing tools on the top toolbar.
  • Affter editing your content, add the date and draw a signature to complete it.
  • Go over it agian your form before you click and download it

How to add a signature on your Facility Description Profile. Facility Description Profile Template To Be Used When

Though most people are in the habit of signing paper documents with a pen, electronic signatures are becoming more common, follow these steps to sign documents online for free!

  • Click the Get Form or Get Form Now button to begin editing on Facility Description Profile. Facility Description Profile Template To Be Used When in CocoDoc PDF editor.
  • Click on the Sign icon in the tools pane on the top
  • A box will pop up, click Add new signature button and you'll be given three choices—Type, Draw, and Upload. Once you're done, click the Save button.
  • Move and settle the signature inside your PDF file

How to add a textbox on your Facility Description Profile. Facility Description Profile Template To Be Used When

If you have the need to add a text box on your PDF for customizing your special content, do some easy steps to accomplish it.

  • Open the PDF file in CocoDoc PDF editor.
  • Click Text Box on the top toolbar and move your mouse to carry it wherever you want to put it.
  • Fill in the content you need to insert. After you’ve inserted the text, you can actively use the text editing tools to resize, color or bold the text.
  • When you're done, click OK to save it. If you’re not settle for the text, click on the trash can icon to delete it and do over again.

An easy guide to Edit Your Facility Description Profile. Facility Description Profile Template To Be Used When on G Suite

If you are seeking a solution for PDF editing on G suite, CocoDoc PDF editor is a commendable tool that can be used directly from Google Drive to create or edit files.

  • Find CocoDoc PDF editor and establish the add-on for google drive.
  • Right-click on a chosen file in your Google Drive and click Open With.
  • Select CocoDoc PDF on the popup list to open your file with and allow access to your google account for CocoDoc.
  • Make changes to PDF files, adding text, images, editing existing text, highlight important part, retouch on the text up in CocoDoc PDF editor and click the Download button.

PDF Editor FAQ

Can C# do everything that Python can?

TL;DRThe answer is huge, but (hopefully) quite comprehensive. I programmed on C# / .NET for almost 10 years, so I know it really well. And I program on Python at Quora for ~ 7 months now, so I hope I know it pretty well.Python is winner in: ease of learning, cross platform development, availability of open source librariesC# is winner in: standard library, language features, development process and tools, performance, language evolution speedRoughly even: syntax (Python is better in readability, C# has more consistent syntax), adoption.SyntaxPython pros:Usually shorter notation:indentation, “:” and “\” instead of “;”, “{“ and “}”no need to decorate any identifier with its type (or “var” in C#)no need to specify function argument types and return typeno need to nest each function into a classno need to use public / protected / private; you should follow “_name” or “__system_name__” convention, but it’s anyway shorterno need to type “new” to invoke constructorGenerator / list comprehension expressions tend to be very short as well.C# pros:More consistent syntax and formatting rules. I can't remember any inconsistencies in C#, but instantly wrote this list of inconsistencies in Python:the fact that assignment expression is not an expression at allold and new class syntax (“class X:” vs “class X(object):”)weird base method call syntax: super(ClassName, self).method_name - it violates DRY twice and doesn’t work for old style classesdifferent formatting rules for = in regular assignment expressions and function arg. spec."except SomeError, error" syntax: show this fragment to someone who never seen Python and ask him what it might meanexception from common rule in tuple syntax: ( (), (1,), (1,2) )class methods: IMO this feature just pollutes standard polymorphism by adding no any significant improvement; worse, people frequently misuse it (e.g. always prefer class methods to static methods)the way Python deals with self / cls (I’ll discuss this in performance section) looks like a leaky abstraction; this adds noticeable performance impact as wellthreading.local is one of the worst abstractions I’ve ever seen; C# offers few options here, but the most widely used is [ThreadStatic] attribute turning static variable into thread-local static. But in Python you must inherit your class from threading.local to ensure its instance fields are thread-local. So same instance sees different fields in different threads. The abstraction is bad not just because it looks like a huge hack, but also because it requires you to write more code (additional class) in typical scenario (thread-local static variable).system method names with double underscores on both sides make you feel like you write on C :) (4 additional symbols for any of such names)In few cases - shorter or cleaner syntax. E.g.:lambda expressions and LINQ (vs generator expressions in Python) are shorter and more readable in C#lower_case convention for method / function / local names (i.e. most of names) in Python requires more keystrokes than camelCase convention in C#. Basically, you do 1-2 additional keystrokes per each identifier.Language featuresPython features, that don't map well to C# features:everything is dynamic. Sometimes this is really useful - e.g. you can add your own “tags” (fields or methods) to nearly any object, or use "monkey patching" (What is monkey-patching?) to change the behavior of third-party code. It’s arguable if it’s good from design point, but there are cases when it’s really nice to have such an opportunity. You can achieve something similar in C#, btw - e.g. by employing dependency injection, extension methods + weak references, but this is more complex. On the other hand, it makes you think more about the architecture that enables you to make such changes without hacky tricks.decorators: there are equivalents in C#, but Python’s decorators are definitely unbeatable in simplicity and flexibility. Closest C# equivalents: nearly any DI container capable of aspect injection (in particular, based on decorator-like attributes); PostSharp aspects.*args, **kwargs - most of static languages don't provide such a way to enumerate/pass call arguments. On the other hand, there are lots of ways to process all arguments in C#:.NET Remoting infrastructure allows to get call arguments in runtime, but this is pretty slowYou can generate a class wrapper using one of code generation facilities (CodeDom, Reflection.Emit, etc.) and do the same fastFinally, if you use dynamic objects, you deal with arguments by nearly the same way as in Python.yield expressions: yield can both accept and return value in Python, but in C# it can only accept a value. On the other hand, it looks like you can implement a very similar logic with async/await (await accepts and returns a value).Class methods: actually it’s good C# doesn’t have this feature :)“with” contexts in Python can process exceptions: __exit__ method there gets information about thrown exception. Unfortunately this is impossible in C#: IDisposable.Dispose() has no any arguments there. The feature can be really useful in some cases - e.g. when you need to make a commit/rollback decision inside block exit code. But you can handle this with nearly the same amount of delegate-based code in C#: dbContext.Transaction(() => { /* code */ }Python features, that can be mapped to C# (i.e. there are close abstractions):list comprehension syntax and generator expressions: LINQ to enumerable (LINQ in general is way more powerful)generator methods: methods returning IEnumerable<T> and IEnumerator<T> in C#. Actually, this feature is implemented in more solid fashion in C#: result of IEnumerable<T> method can be enumerated as many times as you want, and result of IEnumerator<T> method can be enumerated just once. Now look how it works in Python:In [1]: def gen():  ...: yield 1  ...: yield 2  In [2]: g = gen()  In [3]: [x for x in g] Out[3]: [1, 2]  In [4]: [x for x in g] Out[4]: []  In [8]: g = gen()  In [9]: for x in g:  ...: print x  ...: if x == 1:  ...: break  ...: Out[9]: 1  In [10]: [x for x in g] Out[10]: [2] lambda expressions: the same in C#; you can get ~ AST of such an expression in C# too. As I’ve mentioned, C# notation for lambda expressions is shorter: “lambda x: x + 1” in Python is “x => x+1” in C#dynamic typing: dynamic keyword in C# + DLR infrastructure. IronPython/IronRuby are built on it.runtime code generation / parsing / evaluation: lots of facilities in C#: lambda expressions, System.CodeDom, System.Reflection.Emit, third-party wrappers helping to implement typical tasks, and finally, compiler-as-a-service in C# 5named parameters and default values: works ~ the same in C# in terms of syntax.tuple expressions (tuple syntax): C# doesn’t provide any syntax sugar for this, but there are tuples (i.e. regular classes).regex syntax: the same.Now let’s look on C# features, that are missing in Python. I’ll list just the most important ones from my own point of view, but you can get a good imagination of the whole list by looking up this feature-by-feature comparison of C# and Java.Multithreading: Python, in fact, is single threaded: there are “threads”, but Global Interpreter Lock (GIL) allows just one Python thread to execute at any given moment of time (except the case when one of threads awaits for IO completion). There are Python implementations w/o GIL - IronPython (.NET-based) and Jython (JVM-based), but since library developers assume there is GIL, you actually can’t rely on GIL absence even on these platforms. Absence of multithreading brings really big performance-related disadvantages for web apps (pretty unexpected, btw, if you didn’t face them) - but I’ll cover this in performance section.Generics and structs: on one hand, Python doesn’t need generics, since it’s dynamic. On the other hand, they frequently provide huge benefits in terms of memory and speed in C# - even in comparison to Java with its type erasure based generics. E.g. if Vector3D is a struct of 3 doubles in C#, var list = List<Vector3D>(...) will really use ~ list.Length * 3 * sizeof(double) amount of RAM for it, and will be represented by just 2 objects in heap (List<T> + Vector3D[] - the underlying array it uses for storage). But Java should allocate ~ list.Length of objects in heap for this list: each Vector3D is represented by an object in heap there, so totally it uses at least 3 * list.Length * pointer_size more RAM for this. And Python should allocate ~ 4 * list.Length objects in heap (both Vector3D and double are in heap there).LINQ: it isn’t the same as list comprehension in Python:List comprehension is specific syntax sugar available just for iterables in PythonLINQ is syntax sugar as well, but it isn’t bound to a particular generic type: it works for any generic type meeting few expectations. In particular:If this type is IEnumerable<T>, it’s “LINQ to enumerable” - a set of extension methods operating as list comprehension in other languagesBut if this type is IQueryable<T>, it’s what normally referenced as LINQ - a technology allowing to transform a query expression on C# to query on virtually any other language. In particular, it’s LINQ to SQL, LINQ in Entity Framework and so on.Finally, underlying type can be your own. Few examples: LINQ to observables (Reactive Extensions) and parsing monad.Interfaces. They're really good, if the same contract is implemented by several classes.Extension methods: pretty nice feature, actually, although it’s just a syntax sugar improving code readability. Anyway, I used them in C# (mainly to add helpers to some built-in and third-party types like IEnumerable<T>, IRepository<T> and some enums), and their absence in other languages makes me a bit disappointed. You can use "monkey patching" in Python, that's something very similar, but not the same: extension methods don't change the original class and are applied if you import a namespace declaring some of them. So different code can import different extension methods (even if they have identical names).Enumeration types. They’re implemented super-well in C#, and it’s quite good to have this feature integrated.Method overloading: no analogue, but you can handle different argument sets differently in the same method in Python (although usually this is more complex). Method overloading is something natural for static languages, but quite unnatural for dynamic ones.More native code, less interop / plumbing code. C# is fast, so normally you deal just with C# while writing on it. The same isn’t valid for Python: it’s a bad idea to implement nearly any algorithm requiring huge amount of RAM or CPU resources in Python; you’ll quickly learn that nearly any code requiring high performance must be written on C++. All this implies that:If you develop a realtime web app on Python, I’m 99% sure you’ll end up writing few modules on some other (faster) language - e.g. C++. Maybe it’s just 1-2% of the codebase, but it’s +1 language to learn and +1 dedicated subsystem to maintain. Besides C++, you need to know how to interact with C++ code from Python, i.e. how to write some plumbing Python code enabling the interop.Compare this w/interop in C#: I suspect 99% of web apps written on C# don’t have any C++ code at all, because it’s ~ as fast as C++; there are few pretty rare cases when you need C++, but they’re really rare. And even if you’ll ever need this, C# provides really awesome interop capabilities.async/await, Task Parallel Library and Parallel LINQ: they’re really useful in C#, and honestly, most of other languages don’t offer anything similar in terms of usability. But since Python doesn’t support concurrency, this is even worse there. Probably, parallel processing in Cython is one of the simplest options available, but even it looks more as workaround having really limited application scope rather than a full solution, and AFAIK, we never used it practically.Standard libraryC# definitely wins here: its BCL is:better designed (more classes, less static functions)strictly follows naming guidelines (there are lots of names violating PEP8 in its current class library - they’re there mainly for compatibility)better documentedand finally, it offers more abstractions.I can't say Python BCL is totally bad, but it really look worse in comparison to .NET.Development process and toolsI used:C#: Visual Studio .NET (2005, 2008, 2010 and 2012) w/ReSharperPython: latest PyCharm, Vim and some Unix tools like grepPython pros:Interactive Python. You can test lots of small things instantly.Fast startup / restart. Even such a large application as Quora starts in ~ 5 seconds on my devbox. That’s actually a very good property: it doesn’t add a significant friction if you used to do small iterations.No need to compile the project. More precisely, you _almost never_ need to compile the project: I estimate nearly any complex project has some non-Python code + some parts requiring Cython (Python-to-C compiler).No need to maintain project files. I mean *.csproj and *.sln for C# - usually they’re managed by Visual Studio .NET, but almost any complex project requires some of them to be modified manually.C# pros: most of C# pros are based on fact that it is statically typed, so development tools can rely on this. I’ll list just the most importantCorrect intellisense suggestions. I’d estimate that PyCharm provides a correct suggestion only in 30% of cases.Correct refactorings. Nearly any refactoring in PyCharm requires manual fixes. I’d say PyCharm dependency detection gives some false positives in 30% cases, and false negatives in 10% of cases, so you always need to supervise this. And that’s really annoying in case of really large refactorings (100+ usages). Most of Python developers use grep for this, and that’s way more complex. I’d say, that’s probably the biggest disadvantage: you can easily spend 10+ minutes (in some cases - an hour or so) on actions that take 1 minute in ReSharper.Way better “online” error detection / highlighting. The most typical example: if PyCharm is incapable to derive the type of x, don’t expect it highlights x.soemthing as an error. The same never happens in case with C# (of course, if you don’t use dynamics).ReSharper provides way more helpers - mostly, stub generators. E.g. "implement /extract interface" or "implement equality members" is something I used to. PyCharm has nothing similar (probably, because Python doesn't support interfaces :) ). But anyway, the point is: despite the fact C# requires you to write more bolerplate code, nearly all typical code can be quickly generated by tools like ReSharper. So you actually don't feel any friction about that.VS.NET provides better support for related tools and technologies. Full support of e.g. Razor ASP.NET MVC templates (intellisense, navigation, errors, etc.), ASP.NET MVC itself and languages like Less/Sass is really useful: you do way less actions to add somethign standard.Compilation detects may be 50% of errors even before launching the code. Yeah, that’s one of benefits of statically typed language: you don’t need to run the code to detect pretty large part of errors.Better debugger, integrated profiler. I can’t say PyCharm is bad here (no profiler, but its debugger is very nice), but I have a feeling that VS.NET offers more useful options.Relatively fast compilation and startup. “Relatively”, because it is way faster than e.g. GCC; startup is fast if you pay attention to this - actually it’s pretty easy to make it slow, especially for a large app.Overall, I think C# is definitely a winner in scope of this section. Python clearly gives some benefits if your codebase is relatively small, but most of them turn into disadvantages when it becomes large (or huge). E.g. pretty big amount of friction associated with refactoring makes developers to postpone this, that eventually increases technical debt. I can’t say if snowball effect is highly probable in this case, but at least its probability seems higher.PerformanceDisclaimer: I never studied CPython code, so a part of further statements explaining how it works internally might be false: I reason about this mainly by applying my Python debugging experience + general logic. Nevertheless estimated timings provided here are well-aligned with actual measurements, so hopefully, if there are some mistakes, they aren’t vital.That’s the most painful part of comparison for Python. CPython (most widely used Python interpreter) has a set of issues related to performance, and I’ll try to cover most important of them here; many of such issues are related to other dynamic languages, but definitely not all of them.It also worth to mention there is PyPy claiming to be almost 6x faster than CPython; on the other hand, so far we couldn’t reach any speedup by running Quora on PyPy. I can’t fully explain why, but I feel this is mostly because:We use Cython to improve performance at all major hotspots; it’s tiny % of codebase, but it looks like we’d have 30-50% worse performance w/o Cython. So CPython our codebase actually isn’t a pure Python codeIt seems PyPy isn’t quite efficient for applications having huge codebase and large working setWe didn’t try to implement any PyPy-specific optimizations in PyPy branch.Currently performance of PyPy branch is ~ the same or slower as performance of primary CPython branch; I’ll update this section if there are any changes.So why CPython is slow? Let’s start from Alex Gaynor’s presentation:Slides: Why Python, Ruby, and Javascript are Slow (https://speakerdeck.com/alex/why-python-ruby-and-javascript-are-slow)Video: Why Python, Ruby and Javascript are Slow, Rdio's Alex Gaynor at Waza 2013It worth to look all the slides, but I’m going to describe what actually happens in CPython on this particular example. Fast-forward to slide 24: https://speakerdeck.com/alex/why-python-ruby-and-javascript-are-slow?slide=24 (https://speakerdeck.com/alex/why-python-ruby-and-javascript-are-slow?slide=24)Alex lists 3 allocations done by this code, but reality seems to be way worse - it’s actually pretty tricky to even list all the stuff involved there:Python: int(s.split("-", 1)[0])a) s.split(...) involves:a dictionary lookup for "s" name. Few dictionary lookups, if this happens inside a closure (or few nested ones).a dictionary lookup for “split” method of “str” typecreation of a bound method object even before call, i.e. a allocation of a new object in heap:In [3]: x = "a".split In [4]: y = "b".split In [5]: x is y # “is” performs reference comparison in Python Out[5]: False In [6]: z = str.split In [7]: z is x Out[7]: False In [8]: x1 = "a".split In [9]: x1 is x Out[9]: False This happens because methods are actually descriptor objects in Python. So when is executes some_object.some_method(some_value), actually few dictionary lookups + few allocations might happen:CPython looks for “some_method” in “some_object”’s dictionary (actually, its class object, but let’s assume we still have constant lookup time assuming inheritance hierarchy is tiny)And tries to get __get__ member of this object - to check if it’s a descriptor or not, so probably it’s +1 lookup (actually I hope system methods invoked by CPython itself are invoked ~ like virtual methods in C++, i.e. it’s fast). Since some_method is instance method, there is __get__ memberCPython invokes this __get__ member. To invoke it, it must construct and pass a tuple with its arguments. Quite likely, +1 allocation - it’s pretty unlikely they’re passed as structs on stack.__get__ should return a bound method instance, i.e. it’s +1 allocation in the best case as well.Likely, some_method call implies allocation of a new tuple object containing all passed arguments - i.e. (some_value,) in our caseSince we invoke a bound method, there can be two tuples: normally bound method adds self to a tuple passed to it, i.e. produces another tuple: (self, some_value)Probably this isn’t intact for methods that don't accept **kwargs, but the ones that do require a new dictionary to be constructed (pretty large object).So:instance method access =~ 1 dictionary lookup + 2 allocations/deallocations + 1 VMT-like lookup (__get__ member search)instance method call =~ at least 1 dictionary lookup + 4 allocations/deallocations + 1-2 VMT-like lookupsb) split(...) result is a list, which is usually composed of two objects: list wrapper + array, that's re-allocated when list reaches its current size limit. So if it returns a list of 2 strings, there must be at least 4 new objects in heap (list, wrapper + 2 strings).c) ...[0]: works nearly any other method call. Fast languages allow to turn off bounds check for such ops, but effect of doing this in Python must be negligible in comparison to other expenses.d) int(...):a dictionary lookup for "int" name. Few dictionary lookups, if this happens inside a closure (or few nested ones).likely, one tuple allocation (for method call arguments)So let's count the minimum number of dictionary lookups and allocations/deallocations for this simple code:Dictionary lookups: 1 + 1 + 1 = 3Allocations/deallocations: 4 + 4 + 4 + 1 = 13Quick measurement shows that Python needs at least ~50ns for dictionary lookup, and ~50ns for allocation. It’s more difficult to measure deallocation time, but it’s safe to assume it is comparable to allocation time. So expected performance limit of this piece of code is:50ns * 3 + (50ns + 50ns) * 13 = 1450nsChecking with %timeit:In [1]: s = '1-' In [2]: int(s.split("-", 1)[0]) Out[14]: 1 In [3]: %timeit int(s.split("-", 1)[0]) 1000000 loops, best of 3: 1.80 us per loop So actual time is 1800ns.Now let’s calculate what time the same operation could take in C#:C#: int.Parse(s.Split('-'))[0]:3 static class, 0 virtual calls. Static call require ~ 1ns in C#1 string[] allocation, if string.Split is optimized pretty well; small object allocation require ~ 10ns in C#2 string allocation, if Split produces 2 stringsNo need to count deallocation time, since it’s nearly zero for any short-living objects in languages with true generational GC w/compactions.So this code should require at least 33ns in C# (I'll add actual measurement result later here). Actually it should take a bit more, since Parse and Split do some job, and it should be probably comparable to these 33ns in terms of CPU consumption time. But even this simple calculation shows this code must be ~ 44x faster on C#; likely the same is valid for other similar languages (Java, Scala, etc.).So let’s summarize some of CPython issues related to performance, that were exposed here:1. Lots of allocations / deallocations, that are costlyThanks to:Bound methods, and likely, a convention of passing arguments as a tupleThe fact that nearly any variable (even local) is stored in heapAbsence of generics and structs. On contrary, these two things together make C# code almost as efficient as C++ in terms of RAM consumption.Finally, CPython uses ~ regular memory allocator. This mean that it should find a large enough space in heap to allocate the object and track the fact this space is used, and do the opposite on deallocation. This happens in any case, i.e. for small, short-living objects as well.Now imagine, .NET needs just to move the pointer + clean up allocated block for any typical allocation, and does virtually nothing for typical deallocation (really: Garbage collection (computer science)). So .NET heap acts much more like a stack: there is no need to look up for free space to allocate some RAM, and no need to worry about deallocation, since there is GC, that touches just live objects, and knows absolutely nothing about dead ones. And since most of objects are short-living, .NET spends zero resources on deallocation of most of objects. Certainly there is amortized deallocation cost, but it's way smaller than in Python (may be it's smaller even than in C++, btw) due to this fact.This explains, btw, why Java is nearly as fast as C#, although there are no structs and true generics: this stack-like heap behavior makes allocations/deallocations of small objects really cheap - almost as cheap as placing them on regular stack (structs and other value types in .NET live on stack). So basically, Java may be slower due to this only when lots of such objects are long-living, so they're promoted to higher GC generations, and this adds some pressure on full GC cycles. This affects on CPU cache hit ratio as well, since any object in heap has additional header (16 bytes in 64-bit processes on .NET; not sure about Java), so if objects are small, % of excessive data in continuous block of RAM can be pretty high - e.g. at least 80% for such blocks of integers. But anyway, that's Java; Python has way more serious issues here.2. Relatively large objectsMost of objects are dictionaries, so they tend to consume several times more RAM than e.g. in objects C#. Efficiently this reduces the size of CPU caches by the same factor. But L1/L2 misses are super-expensive - they can easily slow down your code by an order of magnitude, and Python programs tend to get these 10x way easier.3. Bad garbage collection (GC) implementationCPython doesn’t have true generational GC. That's mentioned in 1), but here I'd like to show few more side effects of that:It never moves objects in memory (Do python objects move in memory during execution?), thus there are no "true" generations defined by border addresses in RAM (I suspect generation is just some mark in object's header there)It uses reference counting + likely, mark and sweep-like collector to find and remove garbageThere are generations, but it looks like they aren’t quite helpful: GC pause can easily take few seconds, if you have a large heapWhy it’s bad?No compactions = RAM fragmentation + bad CPU cache utilization. For comparison, .NET tunes up GC in such a way that Gen0 is always inside L1 CPU cache, and Gen1 is inside L2 CPU cache - i.e. most frequently accessed objects are cached quite efficiently in C#, and almost always aren’t in cache in Python - due to RAM fragmentation and significantly larger average object size. Details: Garbage collection (computer science)Reference counting = global interpreter lock = no true multithreading + no benefits of fork()-ing the process to share a single copy of code and initial data set across several Python processesGC pauses are proportional to the amount of RAM used by your application. Thus CPython app using multiple GB of RAM and running without pauses of several seconds (if not minutes!) is something impossible. Actually even an app using about hundred of megabytes requires special GC tweaks and manual GC cycles to avoid pauses at random moments.Finally, I found it quite misleading that "gc" module documentation doesn't reflect this: 27.12. gc - Garbage Collector interface - Python v2.7.5 documentation. Worse, if you look on descriptions there, I bet the initial impression you'll get is: "cool, it has generational GC!". There are parts that might make an experienced developer to suspect the opposite (can you find them, btw?), but I feel like the only conclusion most of people can make is that Python has nearly the same implementation of GC as other modern languages. And that's misleading.4. Lots of dictionary lookupsPython uses dictionary lookup to resolve address of nearly any symbol (even local variable). Dictionary lookup time is ~ 50ns there (btw, it’s nearly the same in C# for Dictionary<K,V>).Static languages (including C#) resolve virtual method addresses using Virtual Method Table lookup, and such lookup usually takes 2-3ns to complete..NET code uses dictionary lookups just in one case: when it invokes virtual generic method parameterized by generic type(s) (i.e. the call looks like someObject.SomeMethod<T1,T2,...>(...)) - dictionary lookup is the only option it has in this case. But this is relatively rare thing, actually - especially for hotspot code. And even this dictionary lookup usually takes ~ 20ms there.5. Multithreading and related issuesAs I wrote before, Python, in fact, is single threaded. And just one this things makes it impossible to implement e.g. such optimizations available for web applications on .NET:Any in-memory caches: you can share them across all the threads serving web requests on .NET, but you can’t do the same in Python, since there is no point to handle more than one web request in a single Python process (if it doesn’t wait a lot of time in IO, of course). So you can assume each web request handler written in Python is actually a process with its own address space, and thus you can’t share caches across such processes. So if you run e.g. 16 Python processes on web tier machine, you can assume that effective cache size is ~ 1/16 of cache size for the same .NET app. You can try to tackle this issue by running a process maintaining shared cache for multiple Python processes, but you’ll get additional interop expenses (serialization and deserialization), that add a huge overhead in comparison to direct memory access.The same is actually related to Python code itself. Imagine you run a large web application, that allocates 100MB right on start for code and data. So if it’s .NET application, it can utilize threads to service concurrent requests, there is just one instance of these 100MB of shared stuff. If 5-10MB of it is the part that’s used most frequently (working set), you have a good case, since it’s close to L2 CPU cache size. Now imagine the same in Python: 16 similar processes allocate 1.6GB of right on start; working set size is 80-160MB, which is far beyond L2 cache size, so just one this thing slows down everything by may be a factor of 10. Probably you think you can fork a single Python process to ensure there is a single copy of these 100MB, but this won’t help much: CPython mixed garbage collection utilizing reference counting, so basically, if you reference / dereference something (e.g. copy a reference to some object into local variable), this counter changes its value. So any memory page containing any object from this hot set has nearly zero chance of staying unmodified - i.e. nearly all pages after forking will be copied pretty fast by each of such processes.Above issues are way more painful for Python web apps than e.g. absence of TPL, PLINQ and async/await analogues: you get parallelism almost for free here, so additional parallelism is actually rarely necessary. But this “free parallelism” in .NET is actually way better then “free parallelism” in Python.Cross-platform development supportPython clearly wins here: C# works very well on Unix under Mono, but it’s mostly about its base class library. Nearly anything tightly bound with Windows isn’t available there. Incompatibility map: Compatibility - MonoAdoptionRoughly even: PYPL PopularitY of Programming Language index - pyDatalogAvailability of open source librariesBased on my experience, Python and C# roughly even in terms of availability of free / open source third-party libraries. Nearly all you need to develop a web application is free on .NET.But Python has definitely more open source projects on GitHub: Top Languages · GitHub (many C# projects are hosted on http://www.codeplex.com/ - originally it was the best place to host your own C# project, but right now it’s GitHub, so I think it’s fair to ignore this).So Python is winner here.Ease of learningPython seems way easier to learn:Basic syntax requires you to know less language constructions - e.g. no program in C# can be written w/o declaring a class; you need to know what’s compilation, assemblies, namespaces, classes, methods, public/private/static keywords, etc. On the other hand, you can write a program even without declaring a function in Python. So it’s easier to learn Python iteratively: you need to know almost nothing at start, and use more and more features while studying it deeper. In contrast, C# requires you to learn way more before you even start to write your first program on it.Interactive Python provides really nice way to learn the language and run quick tests.Python standard library is mostly built over functions - there are just few classes, no any complex inheritance, etc.; in contrast, C# base class library is fully object-oriented: lots of classes, sometimes - deep inheritance. Moreover, some parts of it require you to understand functional concepts very well - e.g. as I wrote, LINQ in C# is way more powerful than list comprehension syntax in Python, but that comes with associated learning expenses: list comprehension syntax in Python is, in fact, just a nicer way to write loops, and thus it’s super-easy to explain this. And LINQ is, in fact, a syntax sugar for defining Monads in C# + implementations of some of them (IEnumerable<T>, IQueryable<T>). This description highlights the difference very well :) And LINQ isn’t the only example: there are few other parts of C# BCL that require you to deeply understand all the concepts; try learning WPF, for example.You need to know a set of specialized tools to write on C#. E.g. I used Visual Studio .NET with Resharper and a set of other plugins, Far (it’s like Midnight Commander, but for Windows), Redgate .NET Reflector and IIS on daily basis. And most of people writing on Python use just Vim/Emacs + a set of standard Unix tools. Not sure what’s better here in terms of learning curve - basics of VS.NET are pretty easy to learn; on the other hand, a typical Unix developer doesn’t need to learn any new tools at all to develop on Python, assuming he already knows Vim and unix tools like grep. But... Typical Windows developer knows VS.NET as well :) Anyway, the point is: there are simpler (i.e. less advanced than for C#), but more generic development tools for Python.Language and runtime evolution speedI feel like C# evolves way faster:Versions of C Sharp (programming language)Python Releases

What is the best cryptocurrency to invest in right now?

Traders worry every day about which cryptocurrency to invest in. The crypto market, however, is still difficult to predict. There is no simple answer as to which coins will win the race in 2020.The guarantee: BitcoinBitcoin will always be a good investment. Satoshi Nakamoto's invention continues to lead in terms of market capitalization and trade volume. Almost every crypto exchange can trade Bitcoin and it is the cryptocurrency that is used the most.If you can or just want to invest in a single cryptocurrency, Bitcoin is always a good choice. The first true peer-to-peer currency is still the number 1 cryptocurrencies. So far, there is no indication that Bitcoin will be thrown from the throne in the foreseeable future.The next Bitcoin Halving will also take place in 2020. This means that fewer coins are distributed during mining. The available amount grows more slowly, so that every single coin becomes more valuable as soon as the demand increases. Many investors expect price increases after halving.It is not guaranteed that Bitcoin will experience the biggest growth in 2020. But it's the most stable cryptocurrency to invest so far.Advantages:- Strongest market dominance, largest trading volume- The most widely used cryptocurrency worldwide- Secure facilityBitcoin alternativesBitcoin clones could also be a safe investment: cryptocurrencies such as Bitcoin Cash (BCH), Bitcoin Gold (BTG), Litecoin (LTC) or Bitcoin SV (BSV). These cryptocurrencies are mostly faster and more technically advanced than Bitcoin, but will not be able to break its market dominance in the foreseeable future.They have the same purpose: digital means of payment for the Internet. Your prices often move parallel to the Bitcoin price, but can also rise or fall with a time delay. Some of them have the potential to grow faster than their template, but it is not guaranteed.- Good alternative to diversification- Potential for big price gainsBinance Coin (BNB)The Binance Coin (BNB) is the cryptocurrency of the largest exchange in the world: Binance. The Exchange has expanded considerably in recent years and plans to continue doing so in 2020. An investment in the Binance Coin is equivalent to an investment in the Exchange.The Binance Coin can be used to trade on the cryptocurrency exchange. If you buy cryptocurrencies with her, you get discounts on your purchases. Binance coins therefore have a benefit for every trader. Binance will soon start a decentralized exchange called Binance DEX, on which in turn the in-house cryptocurrency can be used as a means of payment.That makes the Binance Coin extremely liquid. Shortly after the start of the cryptocurrency, it was able to get a permanent place in the top 10 largest cryptocurrencies on CoinMarketCap. In 2019, the BNB price tripled.- Extremely liquid cryptocurrency- Currency on the largest exchange: Binance- Could already gain good pricesTron (TRX)Tron is a blockchain platform from Justin Sun, an important figure in the crypto scene. An independent ecosystem for the entertainment industry is to be created on the platform. Every user should be able to upload their own videos, pictures, music, texts etc. without being dependent on companies like YouTube.Basically, it's a smart contract platform, similar to Ethereum (which is also a good investment). Users can upload data, make it available to other users and write their own smart contracts.Tron now attracts a large number of investors. There is a lot of potential in the project. In 2017, Tron's price rose from EUR 0.0018 to EUR 0.045. In 2018 and 2019, the cryptocurrency gained more and more ground in the crypto world and is now among the top 15 in terms of market capitalization.- Decentralized platform for entertainment- Good gains in the pastIf you like my answer, do me a favor and upvote my answer 😊 Thank you!Click on my Quora Profile:· Extensive guides (How-to Descriptions)· Product links with recommendations and discounts· Invitation to my Messenger Chat

What are the gems every Ruby on Rails developer should know?

I asked something among the lines of this question and I'm going to leave the best of what I got here:What are the most useful gems to use in Rails?Check out the Ruby Toolbox for better feedback:The Ruby Toolbox. But here is a rough list that is collected from Marc Anguera's Github repo and most of the ones I recall to be recommended.Also, to learn more about the following gem, I've made a list of Ruby podcasts that actually talk about some of the following gems in depth:Yad's answer to Are there good alternatives to Ryan Bates' RailsCasts?AbstractionActiveInteraction - Manage application specific business logic.Cells - View Components for RailsInteractor - Interactor provides a common interface for performing complex interactions in a single requestLight Service - Series of Actions with an emphasis on simplicity.Mutations - Compose your business logic into commands that sanitize and validate inputReform - Form objects decoupled from models.Admin Interfaceupmin/upmin-admin-ruby Upmin Admin is a framework for creating powerful Ruby on Rails admin backends with minimal effort.ActiveAdmin - a Ruby on Rails framework for creating elegant backends for website administrationRailsAdmin - A Rails engine that provides an easy-to-use interface for managing your dataAnalyticGabba - Simple way to send server-side notifications to Google Analyticsactivenetwork/gattica Gattica is a Ruby library for talking to the Google Analytics API.Ahoy - A solid foundation to track visits and events in Ruby, JavaScript, and native appsLegato - Model analytics reports and queries against the official Google Analytics Reporting APIAPI BuilderActiveModel::Serializers - JSON serialization of objectsCrêpe - The thin API stackGrape - An opinionated micro-framework for creating REST-like APIs in Rubyjbuilder - Create JSON structures via a Builder-style DSLJSONAPI::Resources - JSONAPI::Resources, or "JR", provides a framework for developing a server that complies with the JSON API specification.Jsonite - A tiny, HAL-compliant JSON presenter for your APIsPliny - Opinionated template Sinatra app for writing excellent APIs in Rubyrabl - General ruby templating with json, bson, xml, plist and msgpack supportRails::API - Rails for API only applicationsRoar - Resource-Oriented Architectures in RubyAssetsLess Rails - The dynamic stylesheet language for the Rails asset pipeline.Less - Leaner CSS, in your browser or Ruby.Sass - Sass makes CSS fun againManagement:Rails Assets - Bundler to Bower proxySprockets - Rack-based asset packaging systemAuthentication and OAuthAuthlogicClearance - Small and simple email & password based authenticaton for RailsDevise - A flexible authentication solution for Rails based on WardenOmniAuth - A library that standardizes multi-provider authentication utilizing Rack middlewareSorcery - Magical Authentication for Rails 3 and 4OAuth:Doorkeeper - An OAuth2 provider for RailsOAuth2 - A Ruby wrapper for the OAuth 2.0 protocolAuthorizationAuthority ORM-neutral way to authorize actions in your Rails app.CanCanCanPundit - Minimal authorization through OO design and pure Ruby classesCachingAction caching for Action Pack - Action caching for Action PackDalli - A high performance pure Ruby client for accessing memcached serversRecord Cache - Cache Active Model Records in Rails 3CLI BuilderCommander - The complete solution for Ruby command-line executablesGLI - Git-Like Interface Command Line ParserMain - A class factory and DSL for generating command line programs real quickRake - A make-like build utility for RubySlop - Simple Lightweight Option ParsingThor - A toolkit for building powerful command-line interfacesCMSAlchemy CMS - A powerful, userfriendly and flexible Open Source Rails CMSLocomotiveCMS - A simple but powerful CMS based on Liquid templates and Mongodb databasePublify - A self hosted Web publishing platform on RailsRadiant - A no-fluff, open source content management system designed for small teamsRefinery CMS - An open source Ruby on Rails content management system for Rails 3 and 4Code Analysis and MetricsBrakeman - A static analysis security vulnerability scanner for Ruby on Rails applications.Flay - Flay analyzes code for structural similarities. Differences in literal values, variable, class, method names, whitespace, programming style, braces vs do/end, etc are all ignored. Making this totally rad.Flog - Flog reports the most tortured code in an easy to read pain report. The higher the score, the more pain the code is in.fukuzatsu - Complexity analysis tool with a rich web front-end.MetricFu - A fist full of code metricsrails_best_practices - A code metric tool for rails projectsReek - Code smell detector for RubyRubocop - A static code analyzer, based on the community Ruby style guide.Rubycritic - A Ruby code quality reporter.SimpleCov - Code coverage for Ruby 1.9+ with a powerful configuration library and automatic merging of coverage across test suites.Coding Style GuidesRails style guide - Community-driven Rails best practices and style for Rails 3 and 4RSpec style guide - Better Specs { rspec guidelines with ruby }Ruby style guide - Community-driven Ruby coding styleConcurrencyCelluloid - Actor-based concurrent object framework for RubyConcurrent Ruby - Modern concurrency tools including agents, futures, promises, thread pools, supervisors, and more. Inspired by Erlang, Clojure, Scala, Go, Java, JavaScript, and classic concurrency patterns.EventMachine - An event-driven I/O and lightweight concurrency library for RubyConfigurationConfigatron - Simple and feature rich configuration system for Ruby appsConfigus - Helps you easily manage environment specific settingsdotenv - Loads environment variables from .envEconfig - Flexible configuration for Rails applicationsFigaro - Simple, Heroku-friendly Rails app configuration using ENV and a single YAML fileGlobal - Provides accessor methods for your configuration dataRailsConfig - Multi-environment yaml settings for Rails3Core ExtensionsActiveSupport - A collection of utility classes and standard library extensions.Ruby Facets - The premiere collection of general purpose method extensions and standard additions for Ruby.AttributesActiveAttr - What ActiveModel left outFastAttributes - FastAttributes adds attributes with their types to the classVirtus - Attributes on Steroids for Plain Old Ruby ObjectsHashHashie - A collection of tools that extend Hashes and make them more usefulCountry DataCarmen - A repository of geographic regionsCountries - All sorts of useful information about every country packaged as pretty little country objectsi18n_data - country/language names and 2-letter-code pairs, in 85 languages, for country/language i18nnormalize_country - Convert country names and codes to a standard, includes a conversion program for XMLs, CSVs and DBsDashboardsDashing-Rails - The exceptionally handsome dashboard framework for Rails.Data VisualizationRailRoady - Ruby on Rails 3/4 model and controller UML class diagram generator.Rails Erd - Generate Entity-Relationship Diagrams for Rails applications.Ruby/GraphViz - Ruby interface to the GraphViz graphing toolDatabase DriversCassandra Driver - A pure ruby driver for Apache Cassandra with asynchronous io and configurable load balancing, reconnection and retry policiesDataObjects - An attempt to rewrite existing Ruby database drivers to conform to one, standard interface.mongo-ruby-driver - MongoDB Ruby drivermoped - A MongoDB driver for Rubymysql2 - A modern, simple and very fast Mysql library for Ruby (binding to libmysql)Redic - Lightweight Redis Clientredis-rb - A Ruby client that tries to match Redis' API one-to-one, while still providing an idiomatic interfaceruby-pg - Ruby interface to PostgreSQL 8.3 and laterSQLite3Database ToolsDatabase Cleaner - Database Cleaner is a set of strategies for cleaning your database in Ruby.PgHero - Postgres insights made easySeed dump - Rails 4 task to dump (parts) of your database to db/seeds.rb.Seed Fu - Advanced seed data handling for Rails.Date and Time Processingbusiness_time - Support for doing time math in business hours and daysChronic - A natural language date/time parser written in pure Rubygroupdate - The simplest way to group temporal data in ActiveRecord, arrays and hashestime-lord - Adds extra functionality to the time classtime_diff - Calculates the difference between two timevalidates_timeliness - Date and time validation plugin for ActiveModel and Railsyymmdd - Tiny DSL for idiomatic date parsing and formattingDebugging ToolsByebug - A simple to use, feature rich debugger for Ruby 2.debugger - A port of ruby-debug that works on 1.9.2 and 1.9.3.DecoratorsDraper - Draper adds an object-oriented layer of presentation logic to your Rails applicationDevOps ToolsBackup - Provides an elegant DSL in Ruby for performing backups on UNIX-like systemsCapistrano - A remote server automation and deployment tool written in RubyChef - A systems integration framework, built to bring the benefits of configuration management to your entire infrastructureLogstash - Logs/event transport, processing, management, searchMina - Really fast deployer and server automation tool.Puppet - An automated administrative engine for your Linux, Unix, and Windows systems, performs administrative tasks (such as adding users, installing packages, and updating server configurations) based on a centralized specificationRubber - The rubber plugin enables relatively complex multi-instance deployments of RubyOnRails applications to Amazon's Elastic Compute Cloud (EC2).DocumentationAsciidoctor - A fast, Ruby-based text processor & publishing toolchain for converting AsciiDoc to HTML5, DocBook, EPUB3, PDF & more.grape-swagger - Add swagger compliant documentation to your Grape APIInch - Inch is a documentation measurement and evalutation tool for Ruby code, based on YARDRDoc - RDoc produces HTML and command-line documentation for Ruby projectsYARD - YARD enables the user to generate consistent, usable documentation that can be exported to a number of formats very easilyE-Commerce and PaymentsActive Merchant - A simple payment abstraction library extracted from ShopifyPaypal Merchant SDK - Official Paypal Merchant SDK for RubyPiggybak - Modular, Extensible open-source ecommerce solution for Ruby on RailsROR EcommerceShoppe - A Rails-based e-commerce platform which allows you to easily introduce a catalogue-based store into your Rails 4 applicationsSpreestripe-ruby - Stripe Ruby bindingsEbookBookshop - Bookshop is a an open-source agile book development and publishing framework for authors, editors.Eeepub - EeePub is a Ruby ePub generator.Gepub - A generic EPUB library for Ruby : supports EPUB 3Git Scribe - Basically the best way to write an ebook.Mobi - A Ruby way to read MOBI format metadataReview - Re:VIEW is flexible document format/conversion systemEmailIncoming - Incoming! helps you receive email in your Rack appsLetterOpener - Preview mail in the browser instead of sending.Mail - A Really Ruby Mail LibraryMailCatcher - Catches mail and serves it through a dreamMailman - An incoming mail processing microframework in RubyPony - The express way to send mail from RubyEnvironment Managementchgems - Chroot for RubyGemschruby - Change your current Ruby. No shims, no crazy options or features, ~90 LOCfry - Simple ruby version manager for fishgem_home - A tool for changing your $GEM_HOMErbenv - Use rbenv to pick a Ruby version for your application and guarantee that your development environment matches productionruby-build - Compile and install Rubyruby-install - Installs Ruby, JRuby, Rubinius, MagLev or MRubyRVM - RVM is a command-line tool which allows you to easily install, manage, and work with multiple ruby environments from interpreters to sets of gemsError HandlingAirbrake - The official Airbrake library for Ruby on Rails (and other Rack based frameworks)Better Errors - Better error page for Rack appsErrbit - The open source, self-hosted error catcherException Notification - A set of notifiers for sending notifications when errors occur in a Rack/Rails applicationNesty - Nested exceptions for RubyRaven Ruby - Raven is a Ruby client for Sentry.File UploadCarrierWave - Classier solution for file uploads for Rails, Sinatra and other Ruby web frameworksDragonFly - A Ruby gem for on-the-fly processing - suitable for image uploading in Rails, Sinatra and much more!PaperClip - Easy file attachment management for ActiveRecordrack-secure-upload - Upload files securelyForm BuilderAbracadabra - The gem that swaps out text with a fully-compliant Rails form in one clickFormtastic - A Rails form builder plugin with semantically rich and accessible markupRails Bootstrap Forms - Rails form builder that makes it super easy to create beautiful-looking forms with Twitter Bootstrap 3+Simple Form - Rails forms made easyGame DevelopmentGosu - A 2D game development library for the Ruby and C++ programming languagesYeah - Practical Ruby video game frameworkGeolocationGeocoder - A complete geocoding solution for Ruby. With Rails it adds geocoding (by street or IP address), reverse geocoding (find street address based on given coordinates), and distance queriesGeokit - Geokit gem provides geocoding and distance/heading calculationsHTTPexcon - Usable, fast, simple Ruby HTTP 1.1. It works great as a general HTTP(s) client and is particularly well suited to usage in API clients.FaradayHttp Client - Gives something like the functionality of libwww-perl (LWP) in Rubyhttp - The HTTP Gem: a simple Ruby DSL for making HTTP requests.httpartyPatron - Patron is a Ruby HTTP client library based on libcurl.RESTClient - Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actionsSavon - Savon is a SOAP client for the Ruby programming language.Sawyer - Secret user agent of HTTP, built on top of FaradayTyphoeus - Typhoeus wraps libcurl in order to make fast and reliable requestsImageryMiniMagick - A ruby wrapper for ImageMagick or GraphicsMagick command linePSD.rb - Parse Photoshop files in Ruby with easeRMagick - RMagick is an interface between Ruby and ImageMagickSkeptick - Skeptick is an all-purpose DSL for building and running ImageMagick commands.Internationalizationi18n-tasks - Manage missing and unused translations with the awesome power of static analysisi18n - Ruby Internationalization and localization solutionr18n - Advanced i18n library for Rails, Sinatra, desktop apps, models, works well with complex languages like Russian.twitter-cldr-rb - Ruby implementation of the ICU (International Components for Unicode) that uses the Common Locale Data Repository to format dates, plurals, and moreLoggingCabin - Structured+contextual logging experiments in Ruby.Fluentd - Fluentd collects events from various data sources and writes them to files, database or other types of storagesHttpLog - Log outgoing HTTP requests.Log4r - Log4r is a comprehensive and flexible logging library for use in Ruby programsLogging - A flexible logging library for use in Ruby programs based on the design of Java's log4j library.Lograge - An attempt to tame Rails' default policy to log everything.MongoDB Logger - MongoDB logger for RailsScrolls - Simple loggingYell - Your Extensible Logging LibraryMachine LearningPredictionIO Ruby SDK - The PredictionIO Ruby SDK provides a convenient API to quickly record your users' behavior and retrieve personalized predictions for themRuby Datumbox Wrapper - It's a simple Ruby Datumbox Wrapper. At the moment the API currently allows you to build applications that make use of machine learning algorithms.Markdown Processorskramdown - Kramdown is yet-another-markdown-parser but fast, pure Ruby, using a strict syntax definition and supporting several common extensionsMaruku - A pure-Ruby Markdown-superset interpreterRedcarpet - A fast, safe and extensible Markdown to (X)HTML parserMiscAASM - A library for adding finite state machines to Ruby classesAXLSX - An excel xlsx generation libraryBetty - Friendly English-like interface for your command line. Don't remember a command? Ask BettyForeman - Manage Procfile-based applicationsGollum - A simple, Git-powered wiki with a sweet API and local frontend.Guard - A command line tool to easily handle events on file system modificationsJsonCompare - Returns the difference between two JSON filesplay ► - Your company's djPry Debugger - Pry navigation commands via debugger (formerly ruby-debug)Pry - A powerful alternative to the standard IRB shell for Rubypygments.rb - A Ruby wrapper for the Python pygments syntax highlighterRuby Operators - A webpage showing awesome names for different Ruby operators.Termit - Google Translate with speech synthesis in your terminalTreetop - PEG (Parsing Expression Grammar) parserYomu - Read text and metadata from files and documents (.doc, .docx, .pages, .odt, .rtf, .pdf)Mobile DevelopmentRuboto - A platform for developing full stand-alone apps for Android using the Ruby language and librariesRubyMotion - A revolutionary toolchain that lets you quickly develop and test native iOS and OS X applications for iPhone, iPad and MacMoneyeu_central_bank - A gem that calculates the exchange rate using published rates from European Central BankMoney - A Ruby Library for dealing with money and currency conversionNatural Language ProcessingTreat - Treat is a toolkit for natural language processing and computational linguistics in RubyORM/ODMActiveRecordDataMapper - ORM which works well with legacy databases. Last release (1.2.0) was on 13 October 2011.Guacamole - An ODM for ArangoDBMongoid - An ODM (Object-Document-Mapper) framework for MongoDB in RubyMongoMapperMongoModel - Ruby ODM for interfacing with MongoDB databasesohm - Object-hash mapping library for RedisSequel - Sequel is a simple, flexible, and powerful SQL database access toolkit for RubyORM/ODM ExtensionsMongoid Tree - A tree structure for Mongoid documents using the materialized path patternPackage ManagementGemsBundler - Manage your application's gem dependencies with less painRubyGems - Community's gem hosting servicePackages and ApplicationsBerkshelf - A Chef Cookbook managerCocoaPods - The Objective-C dependency managerfpm - Effing package management! Build packages for multiple platforms (deb, rpm, etc) with great ease and sanityHomebrew-cask - a CLI workflow for the administration of Mac applications distributed as binariesHomebrew - The missing package manager for OS XPaginationKaminari - A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for modern web app frameworks and ORMswill_paginate - A pagination library that integrates with Ruby on Rails, Sinatra, Merb, DataMapper and SequelPDFGimli - Utility for converting markup files to pdf files.Kitabu - A framework for creating e-books from Markdown/Textile text markup using Ruby.Pdfkit - HTML+CSS to PDF using wkhtmltopdfPrawn - Fast, Nimble PDF Writer for RubyRGhost - RGhost is a document creation and conversion API.Shrimp - A phantomjs based pdf rendererWicked Pdf - PDF generator (from HTML) plugin for Ruby on RailsWisepdf - Wkhtmltopdf wrapper done rightProcess MonitoringBluepill - Simple process monitoring toolGod - An easy to configure, easy to extend monitoring framework written in RubyProcesses and ThreadsParallel - Run any code in parallel Processes (> use all CPUs) or Threads (> speedup blocking operations). Best suited for map-reduce or e.g. parallel downloads/uploadschildprocess - Cross-platform ruby library for managing child processes.forkoff - brain-dead simple parallel processing for rubyposix-spawn - Fast Process::spawn for Rubys >= 1.8.7 based on the posix_spawn() system interfacesProfilerbullet - Help to kill N+1 queries and unused eager loadingPeek - Visual status bar showing Rails performanceperftools.rb - gperftools (formerly known as google-perftools) for Ruby coderack-mini-profiler - Profiler for your development and production Ruby rack appsruby-prof - A code profiler for MRI rubiesQueueactive_job - Declare job classes that can be run by a variety of queueing backendsDelayed::Job - Database backed asynchronous priority queueResque - A Redis-backed Ruby library for creating background jobsSidekiq - A full-featured background processing framework for Ruby. It aims to be simple to integrate with any modern Rails application and much higher performance than other existing solutions.Sucker Punch - A single process background processing library using Celluloid. Aimed to be Sidekiq's little brother.RoboticsArtoo - Next generation robotics framework with support for different platforms: Arduino, Leap Motion, Pebble, Raspberry Pi, etc.RSSFeed normalizer - Extensible Ruby wrapper for Atom and RSS parsers.Feedjira - A feed fetching and parsing library.Ratom - A fast, libxml based, Ruby Atom library.Simple rss - A simple, flexible, extensible, and liberal RSS and Atom reader.SchedulingClockwork - Clockwork is a cron replacement. It runs as a lightweight, long-running Ruby process which sits alongside your web processes (Mongrel/Thin) and your worker processes (DJ/Resque/Minion/Stalker) to schedule recurring work at particular times or dates.resque-scheduler - A light-weight job scheduling system built on top of Resquerufus-scheduler - Job scheduler for Ruby (at, cron, in and every jobs)Whenever - A Ruby gem that provides a clear syntax for writing and deploying cron jobsSearchattr_searchable - Search engine like fulltext query support for ActiveRecordelasticsearch-rubyhas_scope - Has scope allows you to easily create controller filters based on your resources named scopes.pg_search - Builds ActiveRecord named scopes that take advantage of PostgreSQL's full text searchransack - Object-based searching.Rroonga - The Ruby bindings of GroongaSearchkick - Searchkick learns what your users are looking for. As more people search, it gets smarter and the results get better. It’s friendly for developers - and magical for your users.Searchlogic - Object based searching, common named scopes, and other useful named scope tools for ActiveRecordSunspot - A Ruby library for expressive, powerful interaction with the Solr search engineThinking Sphinx - A library for connecting ActiveRecord to the Sphinx full-text search toolSEOFriendlyId - The "Swiss Army bulldozer" of slugging and permalink plugins for Active RecordMetaTags - A gem to make your Rails application SEO-friendlySitemapGenerator - A framework-agnostic XML Sitemap generator written in RubySocial NetworkingCampo - Campo is a lightweight forum application, base on Ruby on Rails.diaspora* - A privacy aware, distributed, open source social networkDiscourse - A platform for community discussion. Free, open, simpleForem - Rails 3 and Rails 4 forum engineState MachinesAASM - State machines for Ruby classes (plain Ruby, Rails Active Record, Mongoid)simple_states - A super-slim statemachine-like support libraryStatesman - A statesmanlike state machine libraryWorkflow - A finite-state-machine-inspired API for modeling and interacting with what we tend to refer to as 'workflow'Static Site GenerationHigh Voltage - Easily include static pages in your Rails appJekyll - Transform your plain text into static websites and blogsMiddleman - A static site generator using all the shortcuts and tools in modern web developmentNanoc - A static site generator, fit for building anything from a small personal blog to a large corporate web siteTemplate EngineCurly - A template language that completely separates structure and logicHaml - HTML Abstraction Markup LanguageLiquid - Safe, customer facing template language for flexible web appsMustache - Logic-less Ruby templatesSlim - A template language whose goal is reduce the syntax to the essential parts without becoming crypticTilt - Generic interface to multiple Ruby template enginesTestingFrameworksRSpec - Behaviour Driven Development for RubyFormattersEmoji-RSpec - Custom Emoji Formatters for RSpecFuubar - The instafailing RSpec progress bar formatterNyan Cat - Nyan Cat inspired RSpec formatter!Bacon - A small RSpec cloneCapybara - Acceptance test framework for web applicationsCucumber - BDD that talks to domain experts first and code secondCutest - Isolated tests in RubyKonacha - Test your Rails application's JavaScript with the mocha test framework and chai assertion libraryminitest - minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarkingRR - A test double framework that features a rich selection of double techniques and a terse syntaxshoulda-matchers - Provides Test::Unit- and RSpec-compatible one-liners that test common Rails functionality. These tests would otherwise be much longer, more complex, and error-prone.Spinach - Spinach is a high-level BDD framework that leverages the expressive Gherkin language (used by Cucumber) to help you define executable specifications of your application or library's acceptance criteria.Spork - A DRb server for testing frameworks (RSpec / Cucumber currently)Test::Unit - Test::Unit is a xUnit family unit testing framework for RubyFake DataFabrication - A simple and powerful object generation libraryfactory_girl - A library for setting up Ruby objects as test datafaker - A library for generating fake data such as names, addresses, and phone numbers.ffaker - A faster Faker, generates dummy data, rewrite of faker.Forgery - Easy and customizable generation of forged data.Machinist - Fixtures aren't fun. Machinist isMockActiveMocker - Generate mocks from ActiveRecord models for unit tests that run fast because they don’t need to load Rails or a database.TestXml - TestXml is a small extension for testing XML/HTML.WebMock - Library for stubbing and setting expectations on HTTP requestsWebDriversSelenium WebDriver - This gem provides Ruby bindings for WebDriver.Watir - Web application testing in RubyExtraAppraisal - Appraisal integrates with bundler and rake to test your library against different versions of dependenciesRuby-JMeter - A Ruby based DSL for building JMeter test plansSpring - Preloads your rails environment in the background for faster testing and Rake taskstimecop - Provides "time travel" and "time freezing" capabilities, making it dead simple to test time-dependent codevcr - Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate testsThird-party APIsdatabasedotcom - Ruby client for the Salesforce's Welcome to the world’s most trusted and secure cloud database, salesforce.com. - Salesforce.com and Chatter APIsDropbox - Dropbox API Ruby Client.facy - Command line power tool for facebookfb_graph - A full-stack Facebook Graph API wrapperflickr - A Ruby interface to the Flickr APIgitlab - Ruby wrapper and CLI for the GitLab APIgmail - A Rubyesque interface to Gmail, with all the tools you'll need.hipchat-rb - HipChat HTTP API Wrapper in Ruby with Capistrano hooksinstagram-ruby-gem - The official gem for the Instagram REST and Search APIsitunes_store_transporter - Ruby wrapper around Apple's iTMSTransporter programlinkedin - Provides an easy-to-use wrapper for LinkedIn's REST APIsOctokit - Ruby toolkit for the GitHub APIPusher - Ruby server library for the Pusher API.ruby-gmail - A Rubyesque interface to Gmailruby-trello - Implementation of the Trello API for Rubysoundcloud-ruby - Official SoundCloud API Wrapper for Rubyt - A command-line power tool for Twittertweetstream - A simple library for consuming Twitter's Streaming APItwitter - A Ruby interface to the Twitter APIwikipedia - Ruby client for the Wikipedia API.youtube_it - An object-oriented Ruby wrapper for the YouTube GData APIYt - An object-oriented Ruby client for YouTube API V3VideoStreamio FFMPEG - Simple yet powerful wrapper around the ffmpeg command for reading metadata and transcoding moviesWeb Crawlinganemone - Ruby library and CLI for crawling websites.LinkThumbnailer - Ruby gem that generates thumbnail images and videos from a given URL. Much like popular social website with link preview.Mechanize - Mechanize is a ruby library that makes automated web interaction easy.MetaInspector - Ruby gem for web scraping purposes. It scrapes a given URL, and returns you its title, meta description, meta keywords, an array with all the links, all the images in it, etc.Upton - A batteries-included framework for easy web-scraping. Just add CSS! (Or do more.)Wombat - Web scraper with an elegant DSL that parses structured data from web pagesWeb FrameworksCamping - A web microframework which consistently stays at less than 4kB of codeCuba - A microframework for web developmentLotus - It aims to bring back Object Oriented Programming to web development, leveraging on a stable API, a minimal DSL, and plain objects.Padrino - A full-stack ruby framework built upon SinatraPakyow - A framework for building modern, realtime web-apps in Ruby. It helps you build working software faster with a development process that's friendly to both designers and developersRamaze - A simple, light and modular open-source web application framework written in RubyRoda - A routing tree web frameworkRuby on Rails - A web-application framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) patternSinatra - Classy web-development dressed in a DSLVolt - A Ruby web framework where your ruby code runs on both the server and the clientWeb ServersGoliath - A non-blocking Ruby web server frameworkPhusion Passenger - Fast and robust web server and application serverPuma - A modern, concurrent web server for RubyRack - A common Ruby web server interface. By itself, it's just a specification and utility library, but all Ruby web servers implement this interfaceThin - Tiny, fast & funny HTTP serverUnicorn - Rack HTTP server for fast clients and UnixWebSocketFaye - A set of tools for simple publish-subscribe messaging between web clients. It ships with easy-to-use message routing servers for Node.js and Rack applications, and clients that can be used on the server and in the browser.Firehose - Build realtime Ruby web applicationsRails Realtime - Adding Real-Time To Your RESTful Rails App.Sync - Real-time Rails PartialsWebsocket-Rails - Creates a built in WebSocket server inside a Rails application with ease. Also support streaming HTTP

Comments from Our Customers

It is free and it is simple to use. The PDF quality is always great, without any alignment issues or missing spots.

Justin Miller