Do One Thing And Do It Well

about thinkIT

We are a growing web development company from Romania(East Europe) with an experience on the market since 2005,
having an expert team
and we are handling pretty good PHP, MySql, Symfony, ZF, CodeIgniter, REST, WEB 2.0, HTML 5, Custom Web Development, CSS 3, E-comerce Solutions, CMS, Social Networking, jQuery, automated testing, high traffic web optimizations, outsourcing
offering to our customers qualITy, statisfaction and guaranteeing the success of their business

Our company is located in Iasi which is the second most important IT center in the country (mainly due to the local big university center).

Our expert team is working in a relaxed environment, having anything they want in the office: latest generation of working stations / good internet connection / free coffee.

In the past few years we offerred our services for customers/companies from all regions on the Earth most of them becoming permanent clients and being very happy with our professional work and our prices.

That being said, we are confident that we can have a successful collaboration with you.

our web development services

Business Requirements Analysis

This is the process where we'll understand your needs for the proposed application and based on our previously experience we can help you to improve it and then to find the best solution to implement it.
Benefits of starting with a requirements analysis:
- excluding the risk of building an application that doesn't actually meet your needs
- creating clear specifications from the beginning
- reduce overall cost
- use properly technologies and infrastructure
- by developing a 'mock-up' of the software (most often just the user interface) before starting full development any issues with the application workflow can be indetified and resolved with minimal costs

Custom Application Development

Custom Application Development service is designed to meet the most complex requirements, software architecture/infrastructure and specifications that are not covered by already existing solutions.

SEO

SEO will help your website to rank better in search engines for the terms that are important to you, increasing traffic and customers of your business. We can't guarantee about any particular ranking, as ultimately, the exact ranking is out of our control, but we will do our best.

Application Redevelopment

E-Commerce & Open-Source Platforms setup

Although those out of the box solutions are pretty easy to setup by nontechnical people, there are some areas where you may need help:
- layout and coding changes
- deployment & server side configurations
- payment gateways guidance
- products import (from existing documents or databases)
- traffic monitoring and analysis
- SEO

Project Management and Collaboration

We offer you access to our online Project Management & Collaboration tool.
This way we can keep track of project discussions, files, progress and time tracking from beginning to end-all in one place.
We eliminate errors due to miscommunication because this tool keeps everyone on the same page.
You'll get a bird's eye view on all of the project parameters.

our tutorials

I started to work with NodeJS few years ago and I didn’t had any issues dealing with it until the application I was working on, considerably grew (tons of obects/json stored in memory) and NodeJS starts crashing regularly.

After some research I realized that the issues were:
- the lack of multi-threading (thus increasing the CPU load)
- and the memory limitation (because NodeJS is a 32bit software)
- and of course my not optimized application :)

So, the issue on my side was that the single thread that NodeJS is using and the RAM limit of 1.76GB, was overloaded by my application that I made and I wasn’t able to keep it stable anymore. And I found some solutions that allows me to use all the threads CPU has and all the RAM server has.

Example:
Your host has 1 CPU QuadCore with 8 Threads and 32GB RAM.
In this example your NodeJS application can use all the 32GB of RAM and can create 1 Main Process and 8 childs for each thread that your CPU has.

The solutions:

Increasing NodeJs Memory
RAM limitation is an impediment for each developer if this is a software limitation, so by default NodeJS limits itself on 1.76GB RAM and for some applications this isn’t enough. At the time I’ve started to work with NodeJS, the developers from Google started to work too on an extension that will allow the JavaScript and NodeJS to use more than 1.76GB. That extension is from Chromium and is called V8.

Note: Node.js v4.0.0 already contains V8 v4.5 and you only need to configure it to use more then 2GB of RAM (which defaults to).

In order to install this extension, compile it and then use the kernel V8 of the JavaScript that you need to use on your NodeJS just follow the next commands after you will download and decompress the SourceCode of NodeJS:

The second line above is new. Basically, you just need to set that V8_MAX_SEMISPACE definition. It will otherwise default to a much lower value, causing frequent garbage collection to trigger, depending on the memory characteristics of your server JS.

This is a command line parameter you can pass to node. It gets passed along to the V8 engine, and will prevent it from constantly running that garbage collector. IMO, you can’t do a real-time server with constant ~4 second latency hiccups every 30 seconds or so.

You might want to also use the flag “–expose-gc”, which will enable the “gc();” function in your server JavaScript code. You can then tie this to an admin mechanism, so you will retain the power to trigger garbage collection at any time you want, without having to restart the server. For the most part, if you don’t leak Objects all over the place, you won’t really need to do this often, or at all. Still, it’s useful to have the capability.

“–max-old-space-size=8192”

This you can tweak to fit your particular server, but the value is in MB. I chose 8GB because my expectation is that 4GB is going to be plenty, and 8GB was just for good measure. You may also consider using “–max-new-space-size=2048” (measured in KB, as opposed to the other). I don’t believe that one is nearly as critical, though.

Multithreading
This step could be called also “Taking Advantage of Multi-Processor Environments in NodeJS” because it’s implemented with a library that already exists in NodeJS.
Actually to take advantage on NodeJS multithreading, you need to create a load-balancer.
Note: I would like you to keep in mind that NodeJS doesn’t know how to share the memory content between the threads. But we’ll cover this too, in this tutorial.
Here is how to do it:

if (cluster.isMaster) { // Fork workers after you started the server to manange something else // Like: update some data from cache ( the only way to share the content ) // , update some data from MySQL, // cache them into JSON files / MemCache, // (or other cache / sql softwares that you need ) and // then master will read from them and so on... for (var i = 0; i < numCPUs; i++) { cluster.fork(); } } }

// Some example for update function function updateDataFromCache() { // In my situation I used the MemCache, MySQL and JSON files // to share the data between the workers if (!cluster.isMaster) { // Code for update your cache ( maybe with a timer ) // this part of the code will be executed just in the child workers // the master worker will keep just the HTTP Server running } }

My purpose for this was to create a scheduled HTTP Server with an update function that grabs the data from MySQL and MemCached like this:
- the HTTP server started in MasterCluster and just that it was running there.
- the update function for all data types that I’ve had was running on the rest of the Child Workers, the data was grabbed from MySQL and MemCache and then was stored in some local JSON files.
- the HTTP server has a scheduler that will read those cached JSON files every 30 min.
- the Update function from Child Workers has a scheduler that will pull the data and cache every 10 min.

That’s all about “How to increase the performance of NodeJS to run your scripts”. I hope you enjoyed this tutorial that I’ve made and I hope it helped you.

This solution have advantages and disadvantages and they are as follow:

Advantages

- NodeJS can use all of your CPU threads to balance the overloading from processor and split the work in more processes
- you can use those child workers to make the hard work, like update functions, read from big files, write on big files, execute something that will take long and in this time the Main process will work without any hiccup
- lifting the limitation of RAM will allow you to save more data in NodeJS objects and to keep them in RAM without any overloading, without crashing the NodeJS application and without losing anything

Disadvantages

- the threads can’t share the content from memory, this will force you to use an additional technique that will connect those threads between them and share the data from eachother
- the threads can’t communicate with eachother and they can run the same code if you don’t handle this from your application and this can overwrite the correct data from Child workers.
- if you have an issue on the code for Main Process ( master worker ) then the entire server will crash or will be overloaded, so my suggestion is to use on this master worker, only simple tasks.

Author: Emilian Popa- Senior WebDeveloper @ ThinkITPro

[close description]

[+]Use Google Cloud SQL

What is Google Cloud SQL?

Google Cloud SQL is a web service that allows you to create, configure, and use relational databases that live in Google's cloud. It is a fully-managed service that maintains, manages, and administers your databases, allowing you to focus on your applications and services.

By offering the capabilities of a familiar MySQL database, the service enables you to easily move your data, applications, and services in and out of the cloud. This enables high data portability and helps you achieve faster time-to-market because you can quickly leverage your existing database.

There is a range of configurations from small instances costing just $0.025 per hour up to high end instances with 16GB of RAM and 100GB of data storage. The per use billing option means you only pay for your instance while it is being accessed. The package option has lower and more predictable costs for instances that are frequently accessed.

CodeIgniter Use Google Cloud SQL

In your CodeIgniter directory, open the file application/config/database.php and edit the $db array which as follow:

* Don't forget to put the value of 'pconnect' and 'db_debug' to FALSE !

[close description]

[+] How to integrate Facebook login with CodeIgniter

Description

This library gives the php developer much more intuitive access to the facebook api methods and entities. It is well documented and complete.
This library helps you to collect the necessary information from the user connected on your Facebook Application.

How do I use it?

1) Place this code in your CodeIgniter directory application/libraries/fb.php : * If you want to rename this file you must also rename the class with the same filename without extension php.

[+] PayTPV Integration

PayTpv is a payment gateway service with an impressive number of features:

Quick integration into an existing website using generated forms for credit and debit cards

Web interface that provides a sales force the option of selling via phone, with finely-grained access for each account

Administrative account to review sales, apply chargebacks

Easy to use and accurate statistics

XML Soap support for handling a large number of concurrent payments

Antifraud system to avoid false valid transactions, stolen cards

One-click generated buttons for faster shopping

Recurrent payments and subscription management

Use Case

For one of our customers we have implemented this payment solution in a way to allow his sales team to create orders and allow the customers to pay while
on the field. By implemented both a website and a mobile-optimised wizard we have allowed the team to make sales right after a presentation without needing
to carry a laptop with them.

The mobile shopping wizard has been a huge success, getting to be used by regular customers to order needed items while working on the field. This way
next-day delivery became easy to do by eliminating almost all late night orders.

Need Help?

If you have questions about payment service in general or about implementing the PayTPV API in your software or web application please contact us.

[close description]

[+] Garanti Bank Payment Integration

Description

Garanti Bank is is Turkey's second largest private bank. It provides a web REST-full XML API for merchants that can be used to

make payments

refund payments

query account information

starting a recurring payment schedule

pausing a recurring payment or modifyng the payment value

stopping a recurring payment schedule

It has support for checks and all major credit card companies, including, but not limited to:

Visa

Master Card

American Express

Garanti Bank API allows the use of multiple currencies including:

TRL

USD

EURO

GBP

JPY

Garanti Bank API supports full secure 3D Secure XML-baset payments, using SSL connections with
client authentication, giving merchants a way to reduce uauthorized transaction chargebacks and
provides customers with a decreased risk of fraudulent usage of their credit card and personal
information.

The XML API provides meaningfull error messages that can be send back to the customer, including
non-valid information and not enough funds on the card, helping them to correct any mistyped details.
A big advantage of using the API from the server, avoiding redirecting the customers through multiple
off-site pages, is a seamless integration with the online shop and provides a better method of
tracking the customer's actions.

The provided API provides support for both recurring payments and multiple addresses. Each payment
is given an identifier and can be later reviewed if necesarry.

Use Case

We have implemented complete gateway payment solutions that are used by multiple websites, offering
the merchants a web-based interface to configure and review their payment processing details, while
being PCI-DSS compliant.

Challenges

Our team worked closely with the support staff at Garanti Bank to ensure a fast and secure implementation of
the provided api, from the initial documentation until going live and finalising the testing phase with
real payments and refunds.

The biggest challenge was using the api - the main documentation being in turkish and the provided english
documents were lacking. By talking daily over email and phone with the support staff we've managed to meet
the deadline set by our client - with time to spare!.

Need Help?

If you have questions about payment service in general or about implementing the Garanti Payment API in
your software or web application please contact us.

[close description]

[+]Google Adsense Redirect

Description

As more customers come from search engines, getting them to the right product or product list can sometimes be a challange. With our implementation we show the customers the most probable items that they are interested in based on their searches.
The recomended product list ca be edited by the website admin or any employee via a simple web interface.

Use case

The client has a online store with tens of thousands of products. When creating Google Adsense Campaigns for a large number of products he
did not want to create a campaign for each product.

We developed a web page page for him to use as the campaign's target.
A back-end administrative page was created to allow configuration of products, priority and other per-product settings.
When a visitor clics on a Google Adsense Ad it is redirected to the custom page that displays the relevant product, taking into account the search
keywords that Adsenses provides.

[+]How to integrate Twitter login with CodeIgniter

Description

This library gives the php developer much more intuitive access to the twitter api methods and entities. It is well documented and complete.
This library helps you to collect the necessary information from the user connected on your Twitter Application.

How do I use it?

1) Place this code in your CodeIgniter directory application/libraries/twitter_lib.php : * If you want to rename this file you must also rename the class with the same filename without extension php.

[+]PCI-DSS Compliance

Description

PCI DSS (Payment Card Industry Data Security Standard) is the industry standard that describes the whay to handle credit card data in a secure manner. It was defined by the Payment Card Industry Security Standards Council which is createad by the major debic, credit, prepaid, e-purse, ATM and POS card companies.

Being PCI-DSS means being subjected to, and passing, yearly audits. Through these audits every step in receving, handling, sending or storing credit cards information is inspected for vulnerabilities.

In the event of a security breah, not being PCI-DSS compliant will mean higher fines and additional penalties compared to PCI-DSS compliant merchants, each credit card information that was stolen of leaked being considered a separate infraction.

Use case

PCI-DSS compliance starts with securing the hardware infrastructure at the physical, network, software and database levels, that is why we start with a good software architecture that supports all the necesary security layers.

Need Help?

If you have questions about handling credit card data or implementing a payment solution for your online store please contact us.

CharterSchoolCapital

BalanceofLove

Fusion-India

ScriptureLullaby

AvasFlowers

MagazineDiscountCenter

InGaraj

Crewlog

MagazinulPiticilor

BoaTechnology

Garanty Payment API

PayTPV

Google Adsense Redirect

PCI-DSS Compliance

This is just a small part of our work in the past few years. Please feel free to browse and request a free quote when you are ready. Thank you!

testimonials

Once again, thank you for all your hard work and brace yourself for some more.
Dylan, Red Square

Thank you for your patience and understanding. At the end of the project, I am very satisfied with the work your team performed.
Guy Leduc, FunWeb

Excellent team work. George and his team were able to comprehend and digest a very complex existing application in short order prior to enhancing the functionality based on our specifications. They enhanced the functionality, improved security of the system and user friendliness. Successfully maintain website over a period of one year. Plan to hire them again for the next project.
Journey of Life

• Jobs Crawler - grab jobs based on keywords found in the title or description, get job location with Google API based on coordinates and classify them in categories and industries from SimplyHired.com

Technologies :
Facebook API, CodeIgniter FrameworkSummary :
With Facebook Message Scheduler you can send multiple private messages to all your Facebook friends. It saves you a lot of time by sending pre-defined birthday messages or auto responders to people who invite you to like a page or to play games.

Technologies :
Symfony Framework 1.4Summary :
Lawbench gives individuals access to a panel of law firms that specialize in U.S. immigration law. Individuals can ask questions to particular law firms on the panel, and the law firms answer the questions asked of them. The information is then posted and archived so that others with similar questions can share the legal information. Lawbench.com serves as an affordable way to learn fact-specific information on immigration law.

Technologies :
Symfony Framework 1.4Summary :
Trackitt lets users collaboratively track the progress of their immigration applications by sharing and discussing the progress of their applications with other applicants. As more users share their case information, it reduces the uncertainty involved in the processing of their applications, and makes it easier to estimate when their applications will be processed.

Technologies :
CodeIgniter FrameworkSummary :
The Neuro-Oncology Committee facilitates networking between professionals and interdisciplinary teams and allows discussion of common treatment issues in an effort to improve the quality of care.

Membership to the Neuro-Oncology Committee is open to all clinicians and investigators within the Vall d'Hebron University Hospital who have an interest in neuro-oncology. At present, representatives on the Committee include neurosurgeons, radiation oncologists, medical oncologists, neuropathologists, neuroradiologists, neuropsychologists, clinical and basic researchers, residents and research fellows.

Technologies :
CodeIgniter FrameworkSummary :
Application for the International Symposium Neuromonitoring and Treatment of patients with brain injury ( PIC 2012 ). “True to our belief that training should be an ongoing process whose ideal setting multidisciplinary forums are open to participation for this year we have organized a series of courses that meet the expectations we expect all professionals who treat injured patients.” Registered users can check registration data, conduct surveys of each course evaluation and / or Symposium, discuss shipping certificates ...

Technologies :
CodeIgniter FrameworkSummary :
Law Staff is proud to recruit for top tier law firms, a large number of medium and small legal practices, barristers' chambers, in-house departments of major corporations and government departments throughout Australia. With 15 years’ of success in the Australian legal recruitment market, our reputation and knowledge speaks for itself.

Technologies :
Custom Web DevelopmentSummary :
This is a real estate web directory where the users can advertise and sell their houses, condos, acreages, farmland and other types of real estate saving home owners hundreds of millions of dollars in commission

Technologies :
Custom Web DevelopmentSummary :
Editors For Students provides high-quality academic editing, proofreading, and formatting services to students writing essay, thesis, and dissertation drafts. Also offers resume and admissions essay editing at highly competitive rates. The services are designed to meet the needs, and the budgets, of graduate and most undergraduate students

Technologies :
Symfony Framework 1.4 + Facebook APISummary :
This is a Dating Application.’"Balance of Love" is a free tool that lets you manage your meaningful relationships by taking positive actions towards people you care about. Get points for actions you take and 'lose' points on actions received. Make sure to give love to keep your balance positive.’

Technologies :
PHP, MySQLSummary :
Garanti Bank is is Turkey's second largest private bank. It provides a web REST-full XML API for merchants that can be used to
make payments and refunds, query account information, set up recuring payments.

Technologies :
PHP, MySQL, AJAXSummary :
We developed a web page page for him to use as the campaign's target.
A back-end administrative page was created to allow configuration of products, priority and other per-product settings.

Summary :
PCI DSS (Payment Card Industry Data Security Standard) is the industry standard that describes the whay to handle credit card data in a secure manner. It was defined by the Payment Card Industry Security Standards Council which is createad by the major debic, credit, prepaid, e-purse, ATM and POS card companies.

QuickContact

Please feel free to contact us for any further information. You will get the answer/offer in the shorthest time possible!

Your message has been sent. We will contact you as soon as possible.Thank you