./mage config-set preferred_state stable
./mage clear-cache
./mage sync
./mage download community Module_Name
<?php | |
// SETUP: | |
// 1. Customize all the settings (stripe api key, email settings, email text) | |
// 2. Put this code somewhere where it's accessible by a URL on your server. | |
// 3. Add the URL of that location to the settings at https://manage.stripe.com/#account/webhooks | |
// 4. Have fun! | |
// set your secret key: remember to change this to your live secret key in production | |
// see your keys here https://manage.stripe.com/account |
magento troubleshoot: list all configurable products, whose stock status is wrong according to its associated simple products
This script lists all configurable products, which are "Out of Stock" and where at least one associated simple product is in stock. Additionally it lists configurable products, where the configurable product is set to "in stock" but none of the associated simple products are "in stock". When catalog is setup correctly, this script should return nothing.
<?php
require_once('app/Mage.php'); //Path to Magento
# app/validation/AbstractValidator.php | |
<?php namespace YourApp\Validation; | |
/** | |
* Abstract implementation of a validator. | |
* | |
* @author Andrea Marco Sartori | |
*/ | |
abstract class AbstractValidator implements ValidatorInterface |
I was asked how I deal with validation / create and update validation rulesets. Well here is one method I have used. Don't be afraid to build on top of what the framework has already given you. In my projects I use a base class for almost anything. You never know when you want your classes to inherit some common functionality. My BaseValidator
actually has some pretty useful methods and properties in it.
<?php
namespace FooProject\Internal\Validators;
use FooProject\Internal\Sanitizers\BaseSanitizer;
(function (ko, handlers, unwrap, extend) { | |
"use strict"; | |
extend(handlers, { | |
href: { | |
update: function (element, valueAccessor) { | |
handlers.attr.update(element, function () { | |
return { href: valueAccessor() }; | |
}); | |
} | |
}, |
Por estar envolvido diretamente com várias comunidades de desenvolvedores, de diversas linguagens, vejo, com frequência, uma série de dificuldades de entendimento por parte dos mais novos (leia-se iniciantes em programação). Essa dificuldade de entendimento, normalmente, está relacionada com uma confusão em relação ao objetivo real do desenvolvimento de software.
Programar, ao contrário do que os mais novos pensam, não se trata de escrever códigos. De fato, trata-se de percepção com o objetivo puro e simples de se resolver problemas. O código é apenas uma, entre as várias atribuições do programador e, acreditem, não é a mais importante.
Digo que não é a mais importante, pois o código é apenas a aplicação de uma linguagem. Porém, quando se percebe que uma linguagem é apenas uma ferramenta, dentre várias ferramentas que podem ser utilizadas, compreende-se que o código naquela linguagem é equivalente ao serrote utilizado pelo marceneiro.
Alguém aqui definiria um marceneiro como um cara que sabe usar um serrot
## Install ISPCOnfig3 + Nginx + OTRS + OpenSUSE 12.2 | |
## Howto instal ISPConfig3 | |
## http://www.howtoforge.com/perfect-server-opensuse-12.2-x86_64-nginx-dovecot-ispconfig-3 | |
## Install Nginx 1.5 | |
wget http://download.opensuse.org/repositories/home:/microchip8:/branches:/server:/http/openSUSE_12.2/x86_64/nginx-1.5.6-55.1.x86_64.rpm | |
zypper in nginx-1.5.6-55.1.x86_64.rpm | |
usermod -A www nginx |
curl_setopt($ch, CURLOPT_COOKIE, ...); // -b | |
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // -X | |
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary | |
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: image/png']); // -H | |
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // -0 |
A programação assíncrona possui a vantagem de gerar códigos perfomáticos. Em certos casos, a implementação de diversas funções assíncronas encadeadas através de funções callback pode prejudicar a leitura e a manutenção do código. Para demonstrar esse encadeamento, vamos utilizar um trecho de código que utiliza a API do Selenium 2. Baseado em um exemplo do site do SauceLabs.
A API do Selenium WebDriver pode ser utilizada por diversas linguagem de programação, porém, em nosso exemplo, iremos utilizar o NodeJS (JavaScript) e o gerenciador de pacotes NPM, que podem ser baixados no site oficial. O NPM é necessário para instalar o PhantomJS e o WD, utilizando o seguinte script:
npm install -g phantomjs
npm install wd
O NodeJS possui dois tipos de dependências: global ou local. Quando uma dependência é