Wednesday, September 10, 2014

Configuring Heroku Timezones

I had a recent project with Heroku in which all my Ruby timezones were incorrect. By default the new installation was set to UTC. To set the timezone, first find the correct zone. You do that by referring to the zone.tab file. Don’t have one of those handy? Use mine below.

Search for a large city near you, and you should find a the TZ entry to use. Once you have found your correct timezone label (For instance, “America/Denver“), fire up your command line. Then type:
heroku config:add TZ="America/Denver"

You should be set now! Here are the timezone settings for 2014:


CC*Coordinates*TZ*Comments*UTC offsetUTC DST offsetNotes
CI+0519-00402Africa/Abidjan+00:00+00:00
GH+0533-00013Africa/Accra+00:00+00:00
ET+0902+03842Africa/Addis_Ababa+03:00+03:00
DZ+3647+00303Africa/Algiers+01:00+01:00
ER+1520+03853Africa/Asmara+03:00+03:00
Africa/Asmera+03:00+03:00Link to Africa/Asmara
ML+1239-00800Africa/Bamako+00:00+00:00
CF+0422+01835Africa/Bangui+01:00+01:00
GM+1328-01639Africa/Banjul+00:00+00:00
GW+1151-01535Africa/Bissau+00:00+00:00
MW-1547+03500Africa/Blantyre+02:00+02:00
CG-0416+01517Africa/Brazzaville+01:00+01:00
BI-0323+02922Africa/Bujumbura+02:00+02:00
EG+3003+03115Africa/Cairo+02:00+02:00DST has been canceled since 2011
MA+3339-00735Africa/Casablanca+00:00+01:00
ES+3553-00519Africa/CeutaCeuta & Melilla+01:00+02:00
GN+0931-01343Africa/Conakry+00:00+00:00
SN+1440-01726Africa/Dakar+00:00+00:00
TZ-0648+03917Africa/Dar_es_Salaam+03:00+03:00
DJ+1136+04309Africa/Djibouti+03:00+03:00
CM+0403+00942Africa/Douala+01:00+01:00
EH+2709-01312Africa/El_Aaiun+00:00+01:00Assuming it follows Morocco DST rules.
SL+0830-01315Africa/Freetown+00:00+00:00
BW-2439+02555Africa/Gaborone+02:00+02:00
ZW-1750+03103Africa/Harare+02:00+02:00
ZA-2615+02800Africa/Johannesburg+02:00+02:00
SS+0451+03136Africa/Juba+03:00+03:00Link to Africa/Khartoum
UG+0019+03225Africa/Kampala+03:00+03:00
SD+1536+03232Africa/Khartoum+03:00+03:00
RW-0157+03004Africa/Kigali+02:00+02:00
CD-0418+01518Africa/Kinshasawest Dem. Rep. of Congo+01:00+01:00
NG+0627+00324Africa/Lagos+01:00+01:00
GA+0023+00927Africa/Libreville+01:00+01:00
TG+0608+00113Africa/Lome+00:00+00:00
AO-0848+01314Africa/Luanda+01:00+01:00
CD-1140+02728Africa/Lubumbashieast Dem. Rep. of Congo+02:00+02:00
ZM-1525+02817Africa/Lusaka+02:00+02:00
GQ+0345+00847Africa/Malabo+01:00+01:00
MZ-2558+03235Africa/Maputo+02:00+02:00
LS-2928+02730Africa/Maseru+02:00+02:00
SZ-2618+03106Africa/Mbabane+02:00+02:00
SO+0204+04522Africa/Mogadishu+03:00+03:00
LR+0618-01047Africa/Monrovia+00:00+00:00
KE-0117+03649Africa/Nairobi+03:00+03:00
TD+1207+01503Africa/Ndjamena+01:00+01:00
NE+1331+00207Africa/Niamey+01:00+01:00
MR+1806-01557Africa/Nouakchott+00:00+00:00
BF+1222-00131Africa/Ouagadougou+00:00+00:00
BJ+0629+00237Africa/Porto-Novo+01:00+01:00
ST+0020+00644Africa/Sao_Tome+00:00+00:00
Africa/Timbuktu+00:00+00:00Link to Africa/Bamako
LY+3254+01311Africa/Tripoli+02:00+02:00Assume revert to permanent UTC+2 rule before 2012.
TN+3648+01011Africa/Tunis+01:00+01:00
NA-2234+01706Africa/Windhoek+01:00+02:00
US+515248-1763929America/AdakAleutian Islands−10:00−09:00
US+611305-1495401America/AnchorageAlaska Time−09:00−08:00
AI+1812-06304America/Anguilla−04:00−04:00
AG+1703-06148America/Antigua−04:00−04:00
BR-0712-04812America/AraguainaTocantins−03:00−03:00
AR-3436-05827America/Argentina/Buenos_AiresBuenos Aires (BA, CF)−03:00−03:00
AR-2828-06547America/Argentina/CatamarcaCatamarca (CT), Chubut (CH)−03:00−03:00
America/Argentina/ComodRivadavia−03:00−03:00Link toAmerica/Argentina/Catamarca
AR-3124-06411America/Argentina/Cordobamost locations (CD, CC, CR, ER, FO, MN, SE, SF)−03:00−03:00
AR-2411-06518America/Argentina/JujuyJujuy (JY)−03:00−03:00
AR-2926-06651America/Argentina/La_RiojaLa Rioja (LR)−03:00−03:00
AR-3253-06849America/Argentina/MendozaMendoza (MZ)−03:00−03:00
AR-5138-06913America/Argentina/Rio_GallegosSanta Cruz (SC)−03:00−03:00
AR-2447-06525America/Argentina/Salta(SA, LP, NQ, RN)−03:00−03:00
AR-3132-06831America/Argentina/San_JuanSan Juan (SJ)−03:00−03:00
AR-3319-06621America/Argentina/San_LuisSan Luis (SL)−03:00−03:00
AR-2649-06513America/Argentina/TucumanTucuman (TM)−03:00−03:00
AR-5448-06818America/Argentina/UshuaiaTierra del Fuego (TF)−03:00−03:00
AW+1230-06958America/Aruba−04:00−04:00
PY-2516-05740America/Asuncion−04:00−03:00
CA+484531-0913718America/AtikokanEastern Standard Time – Atikokan, Ontario and Southampton I, Nunavut−05:00−05:00
America/Atka−10:00−09:00Link to America/Adak
BR-1259-03831America/BahiaBahia−03:00−02:00
MX+2048-10515America/Bahia_BanderasMexican Central Time – Bahia de Banderas−06:00−05:00
BB+1306-05937America/Barbados−04:00−04:00
BR-0127-04829America/BelemAmapa, E Para−03:00−03:00
BZ+1730-08812America/Belize−06:00−06:00
CA+5125-05707America/Blanc-SablonAtlantic Standard Time – Quebec – Lower North Shore−04:00−04:00
BR+0249-06040America/Boa_VistaRoraima−04:00−04:00
CO+0436-07405America/Bogota−05:00−05:00
US+433649-1161209America/BoiseMountain Time – south Idaho & east Oregon−07:00−06:00
America/Buenos_Aires−03:00−03:00Link toAmerica/Argentina/Buenos_Aires
CA+690650-1050310America/Cambridge_BayMountain Time – west Nunavut−07:00−06:00
BR-2027-05437America/Campo_GrandeMato Grosso do Sul−04:00−03:00
MX+2105-08646America/CancunCentral Time – Quintana Roo−06:00−05:00
VE+1030-06656America/Caracas−04:30−04:30
America/Catamarca−03:00−03:00Link toAmerica/Argentina/Catamarca
GF+0456-05220America/Cayenne−03:00−03:00
KY+1918-08123America/Cayman−05:00−05:00
US+415100-0873900America/ChicagoCentral Time−06:00−05:00
MX+2838-10605America/ChihuahuaMexican Mountain Time – Chihuahua away from US border−07:00−06:00
America/Coral_Harbour−05:00−05:00Link to America/Atikokan
America/Cordoba−03:00−03:00Link toAmerica/Argentina/Cordoba
CR+0956-08405America/Costa_Rica−06:00−06:00
CA+4906-11631America/CrestonMountain Standard Time – Creston, British Columbia−07:00−07:00
BR-1535-05605America/CuiabaMato Grosso−04:00−03:00
CW+1211-06900America/Curacao−04:00−04:00
GL+7646-01840America/Danmarkshavneast coast, north of Scoresbysund+00:00+00:00
CA+6404-13925America/DawsonPacific Time – north Yukon−08:00−07:00
CA+5946-12014America/Dawson_CreekMountain Standard Time – Dawson Creek & Fort Saint John, British Columbia−07:00−07:00
US+394421-1045903America/DenverMountain Time−07:00−06:00
US+421953-0830245America/DetroitEastern Time – Michigan – most locations−05:00−04:00
DM+1518-06124America/Dominica−04:00−04:00
CA+5333-11328America/EdmontonMountain Time – Alberta, east British Columbia & west Saskatchewan−07:00−06:00
BR-0640-06952America/EirunepeW Amazonas−05:00−05:00
SV+1342-08912America/El_Salvador−06:00−06:00
America/Ensenada−08:00−07:00Link to America/Tijuana
America/Fort_Wayne−05:00−04:00Link toAmerica/Indiana/Indianapolis
BR-0343-03830America/FortalezaNE Brazil (MA, PI, CE, RN, PB)−03:00−03:00
CA+4612-05957America/Glace_BayAtlantic Time – Nova Scotia – places that did not observe DST 1966-1971−04:00−03:00
GL+6411-05144America/Godthabmost locations−03:00−02:00
CA+5320-06025America/Goose_BayAtlantic Time – Labrador – most locations−04:00−03:00
TC+2128-07108America/Grand_Turk−05:00−04:00
GD+1203-06145America/Grenada−04:00−04:00
GP+1614-06132America/Guadeloupe−04:00−04:00
GT+1438-09031America/Guatemala−06:00−06:00
EC-0210-07950America/Guayaquilmainland−05:00−05:00
GY+0648-05810America/Guyana−04:00−04:00
CA+4439-06336America/HalifaxAtlantic Time – Nova Scotia (most places), PEI−04:00−03:00
CU+2308-08222America/Havana−05:00−04:00
MX+2904-11058America/HermosilloMountain Standard Time – Sonora−07:00−07:00
US+394606-0860929America/Indiana/IndianapolisEastern Time – Indiana – most locations−05:00−04:00
US+411745-0863730America/Indiana/KnoxCentral Time – Indiana – Starke County−06:00−05:00
US+382232-0862041America/Indiana/MarengoEastern Time – Indiana – Crawford County−05:00−04:00
US+382931-0871643America/Indiana/PetersburgEastern Time – Indiana – Pike County−05:00−04:00
US+375711-0864541America/Indiana/Tell_CityCentral Time – Indiana – Perry County−06:00−05:00
US+414761-0870569America/Indiana/ValparaisoCentral Time – Indiana – Porter County−06:00−05:00
US+384452-0850402America/Indiana/VevayEastern Time – Indiana – Switzerland County−05:00−04:00
US+384038-0873143America/Indiana/VincennesEastern Time – Indiana – Daviess, Dubois, Knox & Martin Counties−05:00−04:00
US+410305-0863611America/Indiana/WinamacEastern Time – Indiana – Pulaski County−05:00−04:00
America/Indianapolis−05:00−04:00Link toAmerica/Indiana/Indianapolis
CA+682059-1334300America/InuvikMountain Time – west Northwest Territories−07:00−06:00
CA+6344-06828America/IqaluitEastern Time – east Nunavut – most locations−05:00−04:00
JM+1800-07648America/Jamaica−05:00−05:00
America/Jujuy−03:00−03:00Link to America/Argentina/Jujuy
US+581807-1342511America/JuneauAlaska Time – Alaska panhandle−09:00−08:00
US+381515-0854534America/Kentucky/LouisvilleEastern Time – Kentucky – Louisville area−05:00−04:00
US+364947-0845057America/Kentucky/MonticelloEastern Time – Kentucky – Wayne County−05:00−04:00
America/Knox_IN−06:00−05:00Link to America/Indiana/Knox
BQ+120903-0681636America/Kralendijk−04:00−04:00Link to America/Curacao
BO-1630-06809America/La_Paz−04:00−04:00
PE-1203-07703America/Lima−05:00−05:00
US+340308-1181434America/Los_AngelesPacific Time−08:00−07:00
America/Louisville−05:00−04:00Link toAmerica/Kentucky/Louisville
SX+180305-0630250America/Lower_Princes−04:00−04:00Link to America/Curacao
BR-0940-03543America/MaceioAlagoas, Sergipe−03:00−03:00
NI+1209-08617America/Managua−06:00−06:00
BR-0308-06001America/ManausE Amazonas−04:00−04:00
MF+1804-06305America/Marigot−04:00−04:00Link to America/Guadeloupe
MQ+1436-06105America/Martinique−04:00−04:00
MX+2550-09730America/MatamorosUS Central Time – Coahuila, Durango, Nuevo Leon, Tamaulipas near US border−06:00−05:00
MX+2313-10625America/MazatlanMountain Time – S Baja, Nayarit, Sinaloa−07:00−06:00
America/Mendoza−03:00−03:00Link toAmerica/Argentina/Mendoza
US+450628-0873651America/MenomineeCentral Time – Michigan – Dickinson, Gogebic, Iron & Menominee Counties−06:00−05:00
MX+2058-08937America/MeridaCentral Time – Campeche, Yucatan−06:00−05:00
US+550737-1313435America/MetlakatlaMetlakatla Time – Annette Island−08:00−08:00
MX+1924-09909America/Mexico_CityCentral Time – most locations−06:00−05:00
PM+4703-05620America/Miquelon−03:00−02:00
CA+4606-06447America/MonctonAtlantic Time – New Brunswick−04:00−03:00
MX+2540-10019America/MonterreyMexican Central Time – Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border−06:00−05:00
UY-3453-05611America/Montevideo−03:00−02:00
CA+4531-07334America/MontrealEastern Time – Quebec – most locations−05:00−04:00
MS+1643-06213America/Montserrat−04:00−04:00
BS+2505-07721America/Nassau−05:00−04:00
US+404251-0740023America/New_YorkEastern Time−05:00−04:00
CA+4901-08816America/NipigonEastern Time – Ontario & Quebec – places that did not observe DST 1967-1973−05:00−04:00
US+643004-1652423America/NomeAlaska Time – west Alaska−09:00−08:00
BR-0351-03225America/NoronhaAtlantic islands−02:00−02:00
US+471551-1014640America/North_Dakota/BeulahCentral Time – North Dakota – Mercer County−06:00−05:00
US+470659-1011757America/North_Dakota/CenterCentral Time – North Dakota – Oliver County−06:00−05:00
US+465042-1012439America/North_Dakota/New_SalemCentral Time – North Dakota – Morton County (except Mandan area)−06:00−05:00
MX+2934-10425America/OjinagaUS Mountain Time – Chihuahua near US border−07:00−06:00
PA+0858-07932America/Panama−05:00−05:00
CA+6608-06544America/PangnirtungEastern Time – Pangnirtung, Nunavut−05:00−04:00
SR+0550-05510America/Paramaribo−03:00−03:00
US+332654-1120424America/PhoenixMountain Standard Time – Arizona (except Navajo)−07:00−07:00
TT+1039-06131America/Port_of_Spain−04:00−04:00
HT+1832-07220America/Port-au-Prince−05:00−04:00
America/Porto_Acre−05:00−05:00Link to America/Rio_Branco
BR-0846-06354America/Porto_VelhoRondonia−04:00−04:00
PR+182806-0660622America/Puerto_Rico−04:00−04:00
CA+4843-09434America/Rainy_RiverCentral Time – Rainy River & Fort Frances, Ontario−06:00−05:00
CA+624900-0920459America/Rankin_InletCentral Time – central Nunavut−06:00−05:00
BR-0803-03454America/RecifePernambuco−03:00−03:00
CA+5024-10439America/ReginaCentral Standard Time – Saskatchewan – most locations−06:00−06:00
CA+744144-0944945America/ResoluteCentral Standard Time – Resolute, Nunavut−06:00−05:00
BR-0958-06748America/Rio_BrancoAcre−05:00
America/Rosario−03:00−03:00Link toAmerica/Argentina/Cordoba
MX+3018-11452America/Santa_IsabelMexican Pacific Time – Baja California away from US border−08:00−07:00
BR-0226-05452America/SantaremW Para−03:00−03:00
CL-3327-07040America/Santiagomost locations−04:00−03:00
DO+1828-06954America/Santo_Domingo−04:00−04:00
BR-2332-04637America/Sao_PauloS & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)−03:00−02:00
GL+7029-02158America/ScoresbysundScoresbysund / Ittoqqortoormiit−01:00+00:00
US+364708-1084111America/ShiprockMountain Time – Navajo−07:00−06:00Link to America/Denver
US+571035-1351807America/SitkaAlaska Time – southeast Alaska panhandle−09:00−08:00
BL+1753-06251America/St_Barthelemy−04:00−04:00Link to America/Guadeloupe
CA+4734-05243America/St_JohnsNewfoundland Time, including SE Labrador−03:30−02:30
KN+1718-06243America/St_Kitts−04:00−04:00
LC+1401-06100America/St_Lucia−04:00−04:00
VI+1821-06456America/St_Thomas−04:00−04:00
VC+1309-06114America/St_Vincent−04:00−04:00
CA+5017-10750America/Swift_CurrentCentral Standard Time – Saskatchewan – midwest−06:00−06:00
HN+1406-08713America/Tegucigalpa−06:00−06:00
GL+7634-06847America/ThuleThule / Pituffik−04:00−03:00
CA+4823-08915America/Thunder_BayEastern Time – Thunder Bay, Ontario−05:00−04:00
MX+3232-11701America/TijuanaUS Pacific Time – Baja California near US border−08:00−07:00
CA+4339-07923America/TorontoEastern Time – Ontario & Quebec – most locations−05:00−04:00
VG+1827-06437America/Tortola−04:00−04:00
CA+4916-12307America/VancouverPacific Time – west British Columbia−08:00−07:00
America/Virgin−04:00−04:00Link to America/St_Thomas
CA+6043-13503America/WhitehorsePacific Time – south Yukon−08:00−07:00
CA+4953-09709America/WinnipegCentral Time – Manitoba & west Ontario−06:00−05:00
US+593249-1394338America/YakutatAlaska Time – Alaska panhandle neck−09:00−08:00
CA+6227-11421America/YellowknifeMountain Time – central Northwest Territories−07:00−06:00
AQ-6617+11031Antarctica/CaseyCasey Station, Bailey Peninsula+11:00+08:00
AQ-6835+07758Antarctica/DavisDavis Station, Vestfold Hills+05:00+07:00
AQ-6640+14001Antarctica/DumontDUrvilleDumont-d’Urville Station, Terre Adelie+10:00+10:00
AQ-5430+15857Antarctica/MacquarieMacquarie Island+11:00+11:00
AQ-6736+06253Antarctica/MawsonMawson Station, Holme Bay+05:00+05:00
AQ-7750+16636Antarctica/McMurdoMcMurdo, South Pole, Scott (New Zealand time)+12:00+13:00Link to Pacific/Auckland
AQ-6448-06406Antarctica/PalmerPalmer Station, Anvers Island−04:00−03:00
AQ-6734-06808Antarctica/RotheraRothera Station, Adelaide Island−03:00−03:00
AQ-9000+00000Antarctica/South_PoleAmundsen-Scott Station, South Pole+12:00+13:00Link to Pacific/Auckland
AQ-690022+0393524Antarctica/SyowaSyowa Station, E Ongul I+03:00+03:00
AQ-720041+0023206Antarctica/TrollTroll Station, Queen Maud Land+00:00+02:00DST offset approximated, as parsing actual rules require zic from tzcode 2014b or later.
AQ-7824+10654Antarctica/VostokVostok Station, Lake Vostok+06:00+06:00
SJ+7800+01600Arctic/Longyearbyen+01:00+02:00Link to Europe/Oslo
YE+1245+04512Asia/Aden+03:00+03:00
KZ+4315+07657Asia/Almatymost locations+06:00+06:00
JO+3157+03556Asia/Amman+02:00+03:00
RU+6445+17729Asia/AnadyrMoscow+08 – Bering Sea+12:00+12:00
KZ+4431+05016Asia/AqtauAtyrau (Atirau, Gur’yev), Mangghystau (Mankistau)+05:00+05:00
KZ+5017+05710Asia/AqtobeAqtobe (Aktobe)+05:00+05:00
TM+3757+05823Asia/Ashgabat+05:00+05:00
Asia/Ashkhabad+05:00+05:00Link to Asia/Ashgabat
IQ+3321+04425Asia/Baghdad+03:00+03:00
BH+2623+05035Asia/Bahrain+03:00+03:00
AZ+4023+04951Asia/Baku+04:00+05:00
TH+1345+10031Asia/Bangkok+07:00+07:00
LB+3353+03530Asia/Beirut+02:00+03:00
KG+4254+07436Asia/Bishkek+06:00+06:00
BN+0456+11455Asia/Brunei+08:00+08:00
Asia/Calcutta+05:30+05:30Link to Asia/Kolkata
MN+4804+11430Asia/ChoibalsanDornod, Sukhbaatar+08:00+08:00
CN+2934+10635Asia/Chongqingcentral China – Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.+08:00+08:00Covering historic Kansu-Szechuan time zone.
Asia/Chungking+08:00+08:00Link to Asia/Chongqing
LK+0656+07951Asia/Colombo+05:30+05:30
Asia/Dacca+06:00+06:00Link to Asia/Dhaka
SY+3330+03618Asia/Damascus+02:00+03:00
BD+2343+09025Asia/Dhaka+06:00+06:00
TL-0833+12535Asia/Dili+09:00+09:00
AE+2518+05518Asia/Dubai+04:00+04:00
TJ+3835+06848Asia/Dushanbe+05:00+05:00
PS+3130+03428Asia/GazaGaza Strip+02:00+03:00
CN+4545+12641Asia/HarbinHeilongjiang (except Mohe), Jilin+08:00+08:00Covering historic Changpai time zone.
PS+313200+0350542Asia/HebronWest Bank+02:00+03:00
VN+1045+10640Asia/Ho_Chi_Minh+07:00+07:00
HK+2217+11409Asia/Hong_Kong+08:00+08:00
MN+4801+09139Asia/HovdBayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan+07:00+07:00
RU+5216+10420Asia/IrkutskMoscow+05 – Lake Baikal+09:00+09:00
Asia/Istanbul+02:00+03:00Link to Europe/Istanbul
ID-0610+10648Asia/JakartaJava & Sumatra+07:00+07:00
ID-0232+14042Asia/Jayapurawest New Guinea (Irian Jaya) & Malukus (Moluccas)+09:00+09:00
IL+3146+03514Asia/Jerusalem+02:00+03:00
AF+3431+06912Asia/Kabul+04:30+04:30
RU+5301+15839Asia/KamchatkaMoscow+08 – Kamchatka+12:00+12:00
PK+2452+06703Asia/Karachi+05:00+05:00
CN+3929+07559Asia/Kashgarwest Tibet & Xinjiang+08:00+08:00Covering historic Kunlun time zone.
NP+2743+08519Asia/Kathmandu+05:45+05:45
Asia/Katmandu+05:45+05:45Link to Asia/Kathmandu
RU+623923+1353314Asia/KhandygaMoscow+06 – Tomponsky, Ust-Maysky+10:00+10:00
IN+2232+08822Asia/Kolkata+05:30+05:30Note: Different zones in history, see Time in India.
RU+5601+09250Asia/KrasnoyarskMoscow+04 – Yenisei River+08:00+08:00
MY+0310+10142Asia/Kuala_Lumpurpeninsular Malaysia+08:00+08:00
MY+0133+11020Asia/KuchingSabah & Sarawak+08:00+08:00
KW+2920+04759Asia/Kuwait+03:00+03:00
Asia/Macao+08:00+08:00Link to Asia/Macau
MO+2214+11335Asia/Macau+08:00+08:00
RU+5934+15048Asia/MagadanMoscow+08 – Magadan+12:00+12:00
ID-0507+11924Asia/Makassareast & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor+08:00+08:00
PH+1435+12100Asia/Manila+08:00+08:00
OM+2336+05835Asia/Muscat+04:00+04:00
CY+3510+03322Asia/Nicosia+02:00+03:00
RU+5345+08707Asia/NovokuznetskMoscow+03 – Novokuznetsk+07:00+07:00
RU+5502+08255Asia/NovosibirskMoscow+03 – Novosibirsk+07:00+07:00
RU+5500+07324Asia/OmskMoscow+03 – west Siberia+07:00+07:00
KZ+5113+05121Asia/OralWest Kazakhstan+05:00+05:00
KH+1133+10455Asia/Phnom_Penh+07:00+07:00
ID-0002+10920Asia/Pontianakwest & central Borneo+07:00+07:00
KP+3901+12545Asia/Pyongyang+09:00+09:00
QA+2517+05132Asia/Qatar+03:00+03:00
KZ+4448+06528Asia/QyzylordaQyzylorda (Kyzylorda, Kzyl-Orda)+06:00+06:00
MM+1647+09610Asia/Rangoon+06:30+06:30
SA+2438+04643Asia/Riyadh+03:00+03:00
Asia/Saigon+07:00+07:00Link to Asia/Ho_Chi_Minh
RU+4658+14242Asia/SakhalinMoscow+07 – Sakhalin Island+11:00+11:00
UZ+3940+06648Asia/Samarkandwest Uzbekistan+05:00+05:00
KR+3733+12658Asia/Seoul+09:00+09:00
CN+3114+12128Asia/Shanghaieast China – Beijing, Guangdong, Shanghai, etc.+08:00+08:00Covering historic Chungyuantime zone.
SG+0117+10351Asia/Singapore+08:00+08:00
TW+2503+12130Asia/Taipei+08:00+08:00
UZ+4120+06918Asia/Tashkenteast Uzbekistan+05:00+05:00
GE+4143+04449Asia/Tbilisi+04:00+04:00
IR+3540+05126Asia/Tehran+03:30+04:30
Asia/Tel_Aviv+02:00+03:00Link to Asia/Jerusalem
Asia/Thimbu+06:00+06:00Link to Asia/Thimphu
BT+2728+08939Asia/Thimphu+06:00+06:00
JP+353916+1394441Asia/Tokyo+09:00+09:00
Asia/Ujung_Pandang+08:00+08:00Link to Asia/Makassar
MN+4755+10653Asia/Ulaanbaatarmost locations+08:00+08:00
Asia/Ulan_Bator+08:00+08:00Link to Asia/Ulaanbaatar
CN+4348+08735Asia/Urumqimost of Tibet & Xinjiang+08:00+08:00Covering historic Sinkiang-Tibettime zone.
RU+643337+1431336Asia/Ust-NeraMoscow+07 – Oymyakonsky+11:00+11:00
LA+1758+10236Asia/Vientiane+07:00+07:00
RU+4310+13156Asia/VladivostokMoscow+07 – Amur River+11:00+11:00
RU+6200+12940Asia/YakutskMoscow+06 – Lena River+10:00+10:00
RU+5651+06036Asia/YekaterinburgMoscow+02 – Urals+06:00+06:00
AM+4011+04430Asia/Yerevan+04:00+04:00
PT+3744-02540Atlantic/AzoresAzores−01:00+00:00
BM+3217-06446Atlantic/Bermuda−04:00−03:00
ES+2806-01524Atlantic/CanaryCanary Islands+00:00+01:00
CV+1455-02331Atlantic/Cape_Verde−01:00−01:00
Atlantic/Faeroe+00:00+01:00Link to Atlantic/Faroe
FO+6201-00646Atlantic/Faroe+00:00+01:00
Atlantic/Jan_Mayen+01:00+02:00Link to Europe/Oslo
PT+3238-01654Atlantic/MadeiraMadeira Islands+00:00+01:00
IS+6409-02151Atlantic/Reykjavik+00:00+00:00
GS-5416-03632Atlantic/South_Georgia−02:00−02:00
SH-1555-00542Atlantic/St_Helena+00:00+00:00
FK-5142-05751Atlantic/Stanley−03:00−03:00
Australia/ACT+10:00+11:00Link to Australia/Sydney
AU-3455+13835Australia/AdelaideSouth Australia+09:30+10:30
AU-2728+15302Australia/BrisbaneQueensland – most locations+10:00+10:00
AU-3157+14127Australia/Broken_HillNew South Wales – Yancowinna+09:30+10:30
Australia/Canberra+10:00+11:00Link to Australia/Sydney
AU-3956+14352Australia/CurrieTasmania – King Island+10:00+11:00
AU-1228+13050Australia/DarwinNorthern Territory+09:30+09:30
AU-3143+12852Australia/EuclaWestern Australia – Eucla area+08:45+08:45
AU-4253+14719Australia/HobartTasmania – most locations+10:00+11:00
Australia/LHI+10:30+11:00Link to Australia/Lord_Howe
AU-2016+14900Australia/LindemanQueensland – Holiday Islands+10:00+10:00
AU-3133+15905Australia/Lord_HoweLord Howe Island+10:30+11:00
AU-3749+14458Australia/MelbourneVictoria+10:00+11:00
Australia/North+09:30+09:30Link to Australia/Darwin
Australia/NSW+10:00+11:00Link to Australia/Sydney
AU-3157+11551Australia/PerthWestern Australia – most locations+08:00+08:00
Australia/Queensland+10:00+10:00Link to Australia/Brisbane
Australia/South+09:30+10:30Link to Australia/Adelaide
AU-3352+15113Australia/SydneyNew South Wales – most locations+10:00+11:00
Australia/Tasmania+10:00+11:00Link to Australia/Hobart
Australia/Victoria+10:00+11:00Link to Australia/Melbourne
Australia/West+08:00+08:00Link to Australia/Perth
Australia/Yancowinna+09:30+10:30Link to Australia/Broken_Hill
Brazil/Acre−05:00Link to America/Rio_Branco
Brazil/DeNoronha−02:00−02:00Link to America/Noronha
Brazil/East−03:00−02:00Link to America/Sao_Paulo
Brazil/West−04:00−04:00Link to America/Manaus
Canada/Atlantic−04:00−03:00Link to America/Halifax
Canada/Central−06:00−05:00Link to America/Winnipeg
Canada/Eastern−05:00−04:00Link to America/Toronto
Canada/East-Saskatchewan−06:00−06:00Link to America/Regina
Canada/Mountain−07:00−06:00Link to America/Edmonton
Canada/Newfoundland−03:30−02:30Link to America/St_Johns
Canada/Pacific−08:00−07:00Link to America/Vancouver
Canada/Saskatchewan−06:00−06:00Link to America/Regina
Canada/Yukon−08:00−07:00Link to America/Whitehorse
Chile/Continental−04:00−03:00Link to America/Santiago
Chile/EasterIsland−06:00−05:00Link to Pacific/Easter
Cuba−05:00−04:00Link to America/Havana
Egypt+02:00+02:00Link to Africa/Cairo
Eire+00:00+01:00Link to Europe/Dublin
Etc/GMT+00:00+00:00Link to UTC
Etc/GMT+0+00:00+00:00Link to UTC
Etc/UCT+00:00+00:00Link to UTC
Etc/Universal+00:00+00:00Link to UTC
Etc/UTC+00:00+00:00Link to UTC
Etc/Zulu+00:00+00:00Link to UTC
NL+5222+00454Europe/Amsterdam+01:00+02:00
AD+4230+00131Europe/Andorra+01:00+02:00
GR+3758+02343Europe/Athens+02:00+03:00
Europe/Belfast+00:00+01:00Link to Europe/London
RS+4450+02030Europe/Belgrade+01:00+02:00
DE+5230+01322Europe/Berlinmost locations+01:00+02:00In 1945, the Trizone did not follow Berlin’s switch to DST, seeTime in Germany
SK+4809+01707Europe/Bratislava+01:00+02:00Link to Europe/Prague
BE+5050+00420Europe/Brussels+01:00+02:00
RO+4426+02606Europe/Bucharest+02:00+03:00
HU+4730+01905Europe/Budapest+01:00+02:00
DE+4742+00841Europe/BusingenBusingen+01:00+02:00Link to Europe/Zurich
MD+4700+02850Europe/Chisinau+02:00+03:00
DK+5540+01235Europe/Copenhagen+01:00+02:00
IE+5320-00615Europe/Dublin+00:00+01:00
GI+3608-00521Europe/Gibraltar+01:00+02:00
GG+4927-00232Europe/Guernsey+00:00+01:00Link to Europe/London
FI+6010+02458Europe/Helsinki+02:00+03:00
IM+5409-00428Europe/Isle_of_Man+00:00+01:00Link to Europe/London
TR+4101+02858Europe/Istanbul+02:00+03:00
JE+4912-00207Europe/Jersey+00:00+01:00Link to Europe/London
RU+5443+02030Europe/KaliningradMoscow-01 – Kaliningrad+03:00+03:00
UA+5026+03031Europe/Kievmost locations+02:00+03:00
PT+3843-00908Europe/Lisbonmainland+00:00+01:00
SI+4603+01431Europe/Ljubljana+01:00+02:00Link to Europe/Belgrade
GB+513030-0000731Europe/London+00:00+01:00
LU+4936+00609Europe/Luxembourg+01:00+02:00
ES+4024-00341Europe/Madridmainland+01:00+02:00
MT+3554+01431Europe/Malta+01:00+02:00
AX+6006+01957Europe/Mariehamn+02:00+03:00Link to Europe/Helsinki
BY+5354+02734Europe/Minsk+03:00+03:00
MC+4342+00723Europe/Monaco+01:00+02:00
RU+5545+03735Europe/MoscowMoscow+00 – west Russia+04:00+04:00
Europe/Nicosia+02:00+03:00Link to Asia/Nicosia
NO+5955+01045Europe/Oslo+01:00+02:00
FR+4852+00220Europe/Paris+01:00+02:00
ME+4226+01916Europe/Podgorica+01:00+02:00Link to Europe/Belgrade
CZ+5005+01426Europe/Prague+01:00+02:00
LV+5657+02406Europe/Riga+02:00+03:00
IT+4154+01229Europe/Rome+01:00+02:00
RU+5312+05009Europe/SamaraMoscow+00 – Samara, Udmurtia+04:00+04:00
SM+4355+01228Europe/San_Marino+01:00+02:00Link to Europe/Rome
BA+4352+01825Europe/Sarajevo+01:00+02:00Link to Europe/Belgrade
RU+4457+03406Europe/SimferopolMoscow+00 – Crimea+04:00+04:00
MK+4159+02126Europe/Skopje+01:00+02:00Link to Europe/Belgrade
BG+4241+02319Europe/Sofia+02:00+03:00
SE+5920+01803Europe/Stockholm+01:00+02:00
EE+5925+02445Europe/Tallinn+02:00+03:00
AL+4120+01950Europe/Tirane+01:00+02:00
Europe/Tiraspol+02:00+03:00Link to Europe/Chisinau
UA+4837+02218Europe/UzhgorodRuthenia+02:00+03:00
LI+4709+00931Europe/Vaduz+01:00+02:00
VA+415408+0122711Europe/Vatican+01:00+02:00Link to Europe/Rome
AT+4813+01620Europe/Vienna+01:00+02:00
LT+5441+02519Europe/Vilnius+02:00+03:00
RU+4844+04425Europe/VolgogradMoscow+00 – Caspian Sea+04:00+04:00
PL+5215+02100Europe/Warsaw+01:00+02:00
HR+4548+01558Europe/Zagreb+01:00+02:00Link to Europe/Belgrade
UA+4750+03510Europe/ZaporozhyeZaporozh’ye, E Lugansk / Zaporizhia, E Luhansk+02:00+03:00
CH+4723+00832Europe/Zurich+01:00+02:00
GB+00:00+01:00Link to Europe/London
GB-Eire+00:00+01:00Link to Europe/London
GMT+00:00+00:00Link to UTC
GMT+0+00:00+00:00Link to UTC
GMT0+00:00+00:00Link to UTC
GMT-0+00:00+00:00Link to UTC
Greenwich+00:00+00:00Link to UTC
Hongkong+08:00+08:00Link to Asia/Hong_Kong
Iceland+00:00+00:00Link to Atlantic/Reykjavik
MG-1855+04731Indian/Antananarivo+03:00+03:00
IO-0720+07225Indian/Chagos+06:00+06:00
CX-1025+10543Indian/Christmas+07:00+07:00
CC-1210+09655Indian/Cocos+06:30+06:30
KM-1141+04316Indian/Comoro+03:00+03:00
TF-492110+0701303Indian/Kerguelen+05:00+05:00
SC-0440+05528Indian/Mahe+04:00+04:00
MV+0410+07330Indian/Maldives+05:00+05:00
MU-2010+05730Indian/Mauritius+04:00+04:00
YT-1247+04514Indian/Mayotte+03:00+03:00
RE-2052+05528Indian/Reunion+04:00+04:00
Iran+03:30+04:30Link to Asia/Tehran
Israel+02:00+03:00Link to Asia/Jerusalem
Jamaica−05:00−05:00Link to America/Jamaica
Japan+09:00+09:00Link to Asia/Tokyo
Kwajalein+12:00+12:00Link to Pacific/Kwajalein
Libya+02:00+02:00Link to Africa/Tripoli
Mexico/BajaNorte−08:00−07:00Link to America/Tijuana
Mexico/BajaSur−07:00−06:00Link to America/Mazatlan
Mexico/General−06:00−05:00Link to America/Mexico_City
Navajo−07:00−06:00Link to America/Denver
NZ+12:00+13:00Link to Pacific/Auckland
NZ-CHAT+12:45+13:45Link to Pacific/Chatham
WS-1350-17144Pacific/Apia+13:00+14:00
NZ-3652+17446Pacific/Aucklandmost locations+12:00+13:00
NZ-4357-17633Pacific/ChathamChatham Islands+12:45+13:45
FM+0725+15147Pacific/ChuukChuuk (Truk) and Yap+10:00+10:00
CL-2709-10926Pacific/EasterEaster Island & Sala y Gomez−06:00−05:00
VU-1740+16825Pacific/Efate+11:00+11:00
KI-0308-17105Pacific/EnderburyPhoenix Islands+13:00+13:00
TK-0922-17114Pacific/Fakaofo+13:00+13:00
FJ-1808+17825Pacific/Fiji+12:00+13:00
TV-0831+17913Pacific/Funafuti+12:00+12:00
EC-0054-08936Pacific/GalapagosGalapagos Islands−06:00−06:00
PF-2308-13457Pacific/GambierGambier Islands−09:00−09:00
SB-0932+16012Pacific/Guadalcanal+11:00+11:00
GU+1328+14445Pacific/Guam+10:00+10:00
US+211825-1575130Pacific/HonoluluHawaii−10:00−10:00
UM+1645-16931Pacific/JohnstonJohnston Atoll−10:00−10:00
KI+0152-15720Pacific/KiritimatiLine Islands+14:00+14:00
FM+0519+16259Pacific/KosraeKosrae+11:00+11:00
MH+0905+16720Pacific/KwajaleinKwajalein+12:00+12:00
MH+0709+17112Pacific/Majuromost locations+12:00+12:00
PF-0900-13930Pacific/MarquesasMarquesas Islands−09:30−09:30
UM+2813-17722Pacific/MidwayMidway Islands−11:00−11:00
NR-0031+16655Pacific/Nauru+12:00+12:00
NU-1901-16955Pacific/Niue−11:00−11:00
NF-2903+16758Pacific/Norfolk+11:30+11:30
NC-2216+16627Pacific/Noumea+11:00+11:00
AS-1416-17042Pacific/Pago_Pago−11:00−11:00
PW+0720+13429Pacific/Palau+09:00+09:00
PN-2504-13005Pacific/Pitcairn−08:00−08:00
FM+0658+15813Pacific/PohnpeiPohnpei (Ponape)+11:00+11:00
Pacific/Ponape+11:00+11:00Link to Pacific/Pohnpei
PG-0930+14710Pacific/Port_Moresby+10:00+10:00
CK-2114-15946Pacific/Rarotonga−10:00−10:00
MP+1512+14545Pacific/Saipan+10:00+10:00
Pacific/Samoa−11:00−11:00Link to Pacific/Pago_Pago
PF-1732-14934Pacific/TahitiSociety Islands−10:00−10:00
KI+0125+17300Pacific/TarawaGilbert Islands+12:00+12:00
TO-2110-17510Pacific/Tongatapu+13:00+13:00
Pacific/Truk+10:00+10:00Link to Pacific/Chuuk
UM+1917+16637Pacific/WakeWake Island+12:00+12:00
WF-1318-17610Pacific/Wallis+12:00+12:00
Pacific/Yap+10:00+10:00Link to Pacific/Chuuk
Poland+01:00+02:00Link to Europe/Warsaw
Portugal+00:00+01:00Link to Europe/Lisbon
PRC+08:00+08:00Link to Asia/Shanghai
ROC+08:00+08:00Link to Asia/Taipei
ROK+09:00+09:00Link to Asia/Seoul
Singapore+08:00+08:00Link to Asia/Singapore
Turkey+02:00+03:00Link to Europe/Istanbul
UCT+00:00+00:00Link to UTC
Universal+00:00+00:00Link to UTC
US/Alaska−09:00−08:00Link to America/Anchorage
US/Aleutian−10:00−09:00Link to America/Adak
US/Arizona−07:00−07:00Link to America/Phoenix
US/Central−06:00−05:00Link to America/Chicago
US/Eastern−05:00−04:00Link to America/New_York
US/East-Indiana−05:00−04:00Link toAmerica/Indiana/Indianapolis
US/Hawaii−10:00−10:00Link to Pacific/Honolulu
US/Indiana-Starke−06:00−05:00Link to America/Indiana/Knox
US/Michigan−05:00−04:00Link to America/Detroit
US/Mountain−07:00−06:00Link to America/Denver
US/Pacific−08:00−07:00Link to America/Los_Angeles
US/Samoa−11:00−11:00Link to Pacific/Pago_Pago
UTC+00:00+00:00
W-SU+04:00+04:00Link to Europe/Moscow
Zulu+00:00+00:00Link to UTC

Thursday, July 10, 2014

iOS Enterprise App Distribution

We have been going through the steps for building an app for iOS Enterprise distribution.  To make it
a little harder, the apps were being built in Xamarin.  However, the steps below works for Xcode too.  We finally conquered all the challenges -- and it wasn't super easy.  Here are a few items to remember for next time:

  • As of iOS 7.1, you must deploy your ipa file to an SSL cert site.
  • You must setup a distribution Provisioning Profile (from an Enterprise subscription).  Once you generate one, download it locally, then right click and "Install".  I had to restart Xcode for it to be recognized.

    With Xamarin, there was only one gotcha: After importing the Provisioning Profile, we had to go to the Project and right-click => Options.  Then go to "iOS Bundle Signing".  From there, we had to make sure the correct Identity was selected and the correct Provisioning Profile.  This was not auto-selected correctly.
  • Additionally, we had to go to iOS IPA Options and check the Build ad-hoc/enterprise package. No other options were filled on that screen.

  • When deployed to the website, when we clicked on the download link, we started receiving the error message:
Unable to Download Application
"Your Application" could not be downloaded at this time.
To fix this, we discovered that the URL that is built into the plist file has to be the full path to the ipa file, such as:

<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://domain.com/fullpath/AppName.ipa</string>
</dict>


  • Finally, we had to set the mime type correctly.  We were using IIS, so:  Open IIS Manager, right-click on Server(local computer), select "MIME Types" => New.  Then add the following:


.IPA   - application/octet-stream 
.PLIST -  text/plain.

Once all that was corrected, we clicked on the link and auto-magically everything lit up and worked.  It's not super easy, but really flows nicely when it works correctly.

Thursday, June 12, 2014

iOS In-App Purchase Error - “Cannot connect to iTunes Store”

From Macgasm

It's true, In-App Purchases are awesome.  However, setting it up could drive you crazy.  I've personally spent too much time tracking this one “Cannot connect to iTunes Store” error down, so I decided to document the fix here.

If you are trying to do an In-App Purchase you might encounter this error.  It happens just as you send the product in for payment.  For me, its with a line like this:

SKPayment * payment = [SKPayment paymentWithProduct:product];

The weird thing is that the product is found just fine.  So, I know the connection to the iTunes Store is working fine.  However, it won't finalize the purchase.  It throws an error that gives (in my case) one of two errors: 0 or 1003.  You can find this error number by implementing the following (Which is taken from Ray Wenderlich's excellent IPAHelper):

- (void)failedTransaction:(SKPaymentTransaction *)transaction {
    
    NSLog(@"failedTransaction...");
    if (transaction.error.code != SKErrorPaymentCancelled)
    {
        NSLog(@"Transaction error: %@", transaction.error.localizedDescription);
    }
    
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];

}

So, here is how I got both error codes to go away:

Error 0 - You must:
  1. Make sure you have accepted all the documentation terms and conditions within https://itunesconnect.apple.com.  Check under Contracts, Tax and Banking just to make sure.
  2. Make sure you are using a test user within the iPhone you are testing with.  To do this, go to iTunesConnect => Manage Users.  Then add a new test user.  Finally, on the phone you are developing with, go to Settings and sign out as your current user.  Sign in with the new test user you just made.  This should do it!
or

Error 1003 - This one seems to be a networking problem.  To clear this, I recommend you delete the App from your test device, Clean the project in Xcode, rebuild and re-deploy.

Another thing you should check is that Apple's service is up.  If you hit the following address, and you see no response, it's down.

https://sandbox.itunes.apple.com/verifyReceipt?uo=8&at=11ld4k

Once you get In App Purchases working, its pretty sweet.  Good luck, its worth it!




Wednesday, April 2, 2014

Overheating Apple Time Capsule

I was forced to convert to Apple products a few years ago to allow me to start building iOS Apps. For the most part I've been happy with their computers & mobile devices. One item that has caused me constant problems is the Time Capsule backup unit. As I found out, it looks cool, but runs HOT!

FYI: The TC is a 4th Generation 2TB model

On warmer days, it would lock up and eventually shut down. Of course, it happened at the most inopportune times. Since my office Internet routes through it, not only would my old backups go away, but Internet traffic would be down. When I started to explore what was going on, I found many people complaining about the same thing: an under-performing cooling system.

The Time Capsule seems poorly designed and/or badly constructed. I say that because the internal fan seems to only come on in an overheated situation. It doesn't keep it constantly cool. Additionally, the fan is butted up directly at the wall hard drive, leaving little room for airflow to come out and around the unit.

There are several online mods (here and here), but I decided to implement my own.  This mod combines their ideas, but the fan doesn't sound like a jet engine on takeoff when you get done.

As you can see from the infrared image of the drive, the hottest part seems to be in back, right where the power supply electronics are located.  The components that take line voltage and step it into a stable power supply create a lot of heat.  Often it was hot enough that I couldn't keep my hand pressed on the unit.

Strange enough, the hard drive was relatively cool.  It is located in the lower right quadrant on the infrared image.

The Nitty-Gritty of the Mod

After removing the rubber base with a heat gun, I got access to the bottom aluminum plate.  After removing about 1000 screws, the internals opened up.  Obviously, the unit must be disconnected from power.

After surveying the situation, I removed the fan and snipped the third wire (See pic).  I put it all back together and started up the unit.  With that wire snipped, the fan runs at 100%.  It cools like crazy, but is much too loud.  So, I needed to add resistance to the #1 wire.

I then took it all apart again.  Next, I removed the fan, snipped the #1 (see the arrows in the pic.)  Then I soldiered in two 100 ohm resisters in parallel.  The leads on each resistor are twisted with the duplicate lead on the other resistor putting them in parallel. The two ends of the #1 wire then were stripped and each end was soldiered to each side of the twisted resistors.

The new resistance (which turns in 50 ohms) causes the fan to run at a much lower speed, but still provide adequate cooling.  I finished the electrical job by wrapping the entire resistor assembly with electrical tape.

Next, with a Sharpie I also marked exactly where the fan was located on top of the aluminum plate.  I drilled a pilot hole, then a 1 1/2" diameter hole to get the max amount to air into the unit.

Finally, in putting it all back together, I rotated the fan 90 degrees so that the output of the fan was pointing at the electronic boards (not the hard drive.)  I used electrical tape to ensure the most of the air goes through the electronics and not out the sides (See pic).

To finish it all off, I put rubber feet from Lowe's on the unit to give it about 1" of clearance under the unit.

When I put it all back together two great things happened: first the fan ran at a level that can't be heard unless you put your ear up to the unit.  Second, it cooled the system down to a level it can handle.  The max temperature I could find was 91.4 F.  That's much better than the 120 F I was getting before the mod.




Thanks to my neighbor who works for Axis cameras for loaning me the best IR camera I've ever seen: the Axis Q1910.


Wednesday, December 18, 2013

Removing Hard Returns with a DOS Batch File

This is just a quick post to save a much-queried DOS Batch file. This will delete hard returns from a given input file. Note that it does an append (">>") to the output file, so you will need to delete the output file each time you run this command.

for /f "delims=" %a in (inputfile.txt) do (echo /s|set /p="%a") >> outputfile.txt

Works like a champ!

Thursday, June 6, 2013

How To Forcefully Shutdown a Windows 7/8 Program

I had a question from a customer yesterday on how to shutdown a non-responsive application. Of course, the best way to do it is to close it the normal way, but what do you do if nothing happens?

In Windows 7/8, I recommend these steps:

  1. Open a command prompt by going to your Start button and typing cmd
  2. In the command prompt window type: taskview
    This will list all the processes running on your computer.
  3. Find your application, such as "explorer.exe" in the following image. To the right of the file name is the PID -- such as 1532 in the below example.
  4. Next try this command: killtask /PID NumberFromStep2. For example:
    killtask /PID 1532
    This command will try to gracefully shutdown the process. This probably won't work if just clicking "close" in the application doesn't work. However, its a good thing to try first.
  5. If the application still doesn't shutdown, it's time to use some force: killtask /F /PID NumberFromStep 2. For example:
    killtask /F /PID 1532

At this point one way or the other, that application is not running. If it still shows up when you type taskview, then there is a dependency problem with something else running. A reboot is in order.

Tuesday, May 21, 2013

Restricting Access By Location in IIS

A customer and I were reviewing their web logs and remarking on how many hits were coming in from countries with which they don't even remotely do business. There were several visits each day from China, Russia, Korea, etc. If they were coming to the site, they were either seriously lost or just up to no good.

We decided to restrict access to those folks that just shouldn't be there. Here is how we did it:

First, we are using IIS7. If you are using a Unix flavor, you need to modify your .htaccess file in the /etc directory. If you are on IIS, there is a similar procedure. You will be modifying the following file:

%WinDir%\System32\Inetsrv\Config\applicationHost.config

Open this file on your IIS Server and search for

location path=
until you find the web instance you want to apply these settings to.

Next you want to get this file: http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip This file is a list of IP addresses by country code.

The last thing to download is this excellent javascript file built by Kanwaljeet Singla. It parses the ip-to-country file into commands you can use in the applicationHost.config file. Once you have the file, rename it to: ipres.js

When you have everything, put it into a folder and pop open your command prompt and go to that directory. Here are a few interesting commands that Kanwaljeet built in:

 // Generate an "allow" list for USA IP addresses
cscript.exe //nologo ipres.js /f ip-to-country.csv /a USA
 // Generate an "deny" list for China IP addresses
cscript.exe //nologo ipres.js /f ip-to-country.csv /d China

So, here is how I got the website to deny anything but United States IP addresses:

  1. Ran the utility above with the command:
    cscript.exe //nologo ipres.js /f ip-to-country.csv /a USA > usa.txt

    This created a file called usa.txt

  2. Opened usa.txt in notepad and copied the text between
    <ipSecurity allowUnlisted="false">
    and the last "add" entry
  3. Opened the ISS ApplicationHost.config file mentioned above in notepad.
  4. Pasted the entire section into the system.webServer/Security section. I also added a special entry that allows me to access the site locally:
    <add ipAddress="10.0.0.0" subnetMask="255.0.0.0" allowed="true" />
  5. Recycled the Application Pool with that website and voila!
Great credit goes to Kanwaljeet Singla for his cool tool.