# wallabag_entry

title: How Do I train (1).pages
url: http://stories.kilianjornet.cat/uploads/files/How%20Do%20I%20train_ENG.pdf
created_at: 2018-01-11 10:33:15
updated_at: 2018-01-11 10:33:15
mimetype: application/pdf
domain_name: stories.kilianjornet.cat
http_status: 200
content:
  This is a guide of Kilian Jornet's workouts. These are training sessions of a professional mountain athlete with lots of years of experience. Carrying out these workouts and bringing the body to the limit requires a very good physical shape and experience. Each type of training must be adapted to the physical condition and the speciﬁc objectives of each person. We recommend consulting a professional before starting any training.The Training Characteristics of Kilian Jornet Training  has  been  and  it  is  my  main  occupation.  I  love  to  workout  and  to  be  pushing  my body and discovering his limits, to be able to race or do projects in the mountains on my best possible level. I started training “seriously” when I was 13 years old. Before that I had been doing activities and  training  mostly  on  the  weekends  (long  days  in  the  mountains)  on  holidays  (some  long hikes  and  summits)  and  during  the  week  (cross-country  ski  2-4  times  /  week  in  winter, running  2-4  times  a  week  in  summer).  At  13  years  old  I  entered  to  CTEMC  (Centre Tecniﬁcació  Esquí  de  Muntanya  de  Catalunya)  and  started  training  on  a  regular  basis,  with  a plan and a coach who gave me the trainings to follow. At 17 years old I started to do my own training plans and since then I have been training by myself. During the period from 2002 to 2017  I  have  competed  in  413  races  (265  in  ski  mountaineering  -  107  Individual,  71  team races,  72  vertical  rces,  10  sprint  or  relays)  and  153  in  trail  running  (81  Sky  Races  or  up  to marathon distance, 32 Ultra Trails and 40 Vertical Kilometers). Here  it  is  an  extensive  summary  of  the  training  characteristics  since  I  started  training  until 2018  (30  years  old).  Day-to-day  training  diary  data  and  physiological  tests  were  analyzed. Training  data  was  systemized  by  type  of  training  (endurance,  strength,  and  speed),  intensity (low,  moderate,  and  high-intensity),  and  mode  (running,  cycling,  skiing, roll  skiing,  climbing and others). The scheduling phases, the speciﬁc sessions used, the training camps in altitude, the  tapering  for  races  and  the  day  to  day  training.  Following  a  17-year  linear  increase  in training load, the annual training volume during the last 7 years has stabilized from 1.000 to 1.200  hours,  distributed  across  400  ±  20  sessions.  90%  of  that  is  in  endurance  training,  the 10% resting, strength and speed training. My Training Principles:  These are the aspects and principles I’m looking for before starting any training planning or execute it. First of all, it is important to make a decision of the priorities of your life and where is the place of training in there:  a.  Train for pleasure: Even if you want to win races, or train 7/7, you will invest on training but have other priorities in your life).
  <br />
  <br />
  b.  Live for training: it is long plan decision, that will take at least 10 years of your life, Training  is  the  priority  number  one  during  this  period,  you  do  everything on  your  days  around  the  training;  eat  for  training,  sleep  for  training,  think  for training,  date  for  training,  ﬁnd  a  job  or  occupation  to  be  able  to  live  for training…
  Depending  on  the  decision  trainings’  organisation  will  be  different.  These  following  points are in a speciﬁc order. In my opinion is basic to have a knowledge and create a base before start  thinking  goals  and  doing  really  speciﬁc.  Below  you  have  more  extensive  developing  of each point.   1.  Know  yourself: Have  a  knowledge  of  yourself.  Your  body  (measures,  morphology, biomechanics)  your  muscles,  your  cardiovascular  system  (VO2max,  thresholds, recovery…) your technique and skills, your capacities, the climate where you perform, where you live, work…    2.    Note and analyse all the trainings: more data you collect, more details you'll have and better  can  be  the  analysis  after,  and  easier  and  more  detailed  you  can  identify directions (good and bad).   3.  Create  a  base: create  a  solid  base  of  volume  and  skills,  the  easiest  and  most  effective is  to  practice  since  young  kid  and  during  years  to  create  the  best  physiological  base for  the  sport,  the  best  muscular  adaptation,  morphology,  nervous  and  cognitive systems.   4.  Work  on  “no  physical”  aspects:  when  we  think  about  training  we  use  to  think  about hours doing physical workouts (endurance - speed - strength) and of course, this is the base  to  make  the  best  tool  (our  body)  but  is  important  that  this  tool  works  perfectly. Technical  training  (circuit  technical  trainings,  downhill,  transitions…)  as  thinking  on strategy, nutrition during races… Is as important as we can win seconds or minutes for “free”.   5.  Feel  your  body:  have  an  understanding  of  how  your  body  works,  study  anatomy, physiology  and  biomechanics,  don’t  take  any  medicine  or  aliment  supplements  if you’re not in a disease to feel exactly how and what your body is feeling, and ﬁnd the best  way  (type  of  training,  eating,  strength  exercise,  psychological…)  to  identify  the weakness or problems and work on that.   6.  Get  used  to  pain:  Get  your  body  and  mind  use  to  do  hard  workouts  as  it  is  used  to sleep,  eat… To  feel  great  on  a  race  you  will  have  to  have  many  painful  (not  feeling good, heavy or just painful) days. It is important to keep training in the pain (if it is not a problem - injury, then you need to identify - point 5). You need to put the body in a<br />
  <br />
  lot of stress to have results after.
    7.  Adjust  the  training  to  conditions:  Live  and  train  on  the  conditions  and  situations  you are going to ﬁnd during the race or the activity until you feel 100% comfortable. More you train in different conditions, easier is to adapt to. (Altitude, humidity, social, night, food, terrain, psychological stress…).   8.  Explore  your  body  in  every  limit  in  safety:  Far  (in  time)  from  competitions  and  in safety areas (close to home, where if you have a problem is not a life treat) get to your limits to know them and to push-it (strength, run down as fast as you can until falling, run as many days without food until you pass out, run without sleeping until you pass out…)  So  you  really  know  the  limits  of  your  body  and  the  feelings  associated  to  the different moments.   9.  Try and fail until it works. Try new exercises all the time to train, to progress. The 70% of  the  time  the  results  will  not  be  good,  but  continue  trying  and  you  will  ﬁnd  the method  or  exercise  that  works  well,  until  the  body  gets  used  to  this  intensity  or method and you need to ﬁnd new methods to put the body in more stress.
    10.  Make  goals:  Be  honest  with  yourself,  and  make  goals  depending  on  your  capacities (strengths and weaknesses) and how much you want to spend (years, hours a day, how much  you  want  to  push  on  trainings…).  Make  big  goals  (races,  chronos…)  and  small goals to be checking that the training is going as planned (small races, X time to do a transition, downhills, legs strength…). KNOWN YOURSELF Know the environment and characteristics of sport/s The  training  has  been  planed  to  perform  in  competitions  in  2  competition  sports; Trail Running  and Ski  Mountaineering  and  other  activities  as Alpinism  and Steep  Skiing. The  ﬁrst big step is to analyze the speciﬁcs and characteristics of the competitions or activities to train for.  In  SkiMo  and  Trail  running,  the  efforts  are  ranging  from  short  explosive  races  (Ski mountaineering  sprint  is  3  minutes  and  relay  is  8  minutes  +-)  to  prolonged  endurance  races lasting  up  to  +  30  h  (Ultra  Trails  or  Alpinism  activities).  These  competitions  are  performed across  varying  terrain  (From  dry  warm  climates  as Western  States  100  to  technical  terrain  or cold  in  Himalayas,  to  easy  trails…).  Both  trail  running  and  ski  mountaineering  races  the average  aerobic  energy  contribution  is  85–95%,  but  in  some  races  to  pass  steeper  parts  or technical sections or the variation of terrain, it can be interval-based, with increased effort in steep  uphill  terrain  and  lower  intensities  in  downhill  or  technical  terrain.  Accordingly,  high aerobic capacity is of crucial importance in this sports, so the VO2max values. However it is also  needed  the  ability  to  rapidly  elevate  the  peak  oxygen  uptake,  utilize  a  high  fraction  of the VO2max  in  all  of  the  techniques,  and  have  well-developed  (skiing  or  running)  efﬁciency and anaerobic capacity.<br />
  <br />
  Know yourself It  is  basic  then  to  know  yourself.  First  the  morphotype  and  biomechanics  of  your  body,  then the  physiological  capacities.  Also  the  technical  skills  and  how  you  are  in  a  psychological level.  It  is  important  to  take  all  this  data  to  make  a  table  of  strengths  and  weaknesses. The training  plan  should  be  elaborate  individually  from  all  this.  It  is  great  to  get  inspirations  and ideas  from  the  other’s  trainings  but  every  person  is  different.  Recheck  these  datas  now  and then  to  reevaluate  and  check  if  you’re  working  on  what  you  wanted.  Every  person  has  a different  morphology,  physiology  response  and  adaptation  to  training  (quality  and  quantity) and psychological qualities (accepting the pain, the failure or success…). So the training must be done individually considering all of those individual parameters. To arrive to a same result (winning X race) the perfect training plan and seances can be really different in athletes. My physiological datas:  Weight: 55-58kg Height: 172 Vo2 Max: 92ml/min/kg (74 at 13 years old, 83 at 18 years old) Max Heart Rate: 200 Min Heart Rate: 34 The  tests  include  also  normally  echocardiogram  and  ultrasound  to  have  an  overview  of  the health  to  practice  sport.  The  physiological  tests  have  been  conducted  at  La  Blume  in Barcelona,  primarily  supervised  by  the  Dr.  Brotons.  Also  at  Asepeyo  in  St.  Cugat  by  Dr. Garrido,  at  CAR  Sierra  Nevada,  at  2.500  altitude  meters  and  at  Hospital  de  Puigcerdà  at 1.000m.  The  testing  protocol  used  more  often  is  the  Bruce  Protocol  adapted  for  Ski Mountaineering. His higher values have been recorded at 92ml/kg/min at 391W and at 24% incline  at  10.7  km/h.  Anaerobic  threshold  (AT)  was  determined  during  treadmill  running around 20% incline at 10 km/h between 175 and 180 HR (80% VO2max).  Table. Physiological Tests NOTE AND ANALYZE More  data  you  collect  of  your  trainings  more  accurate  will  be  the  analyze  afterwards,  easier to  identify  when  is  a  problem  or  a  success  case  of  training.  I  have  recorded  all  the  training from  when  I  started  at  13  years  old  until  today  day  by  day.  Note  at  least:  sport,  time, elevation, distance, feelings. If you add heart rate, speed or power (intensity), recovery (sleep quality,  recovery  after  trainings)  and  some  speciﬁc  (SatO2  if  you’re  in  a  training  camp  in altitude), lactate…It is also good to note the days you’re sick or if you’re traveling, if you take any medication or supplement…<br />
  <br />
  Table. Training diary when I was 13-15 years old. CREATE A BASE You can’t expect to perform from day 1 of training. To create a body adapted to the efforts in all  ways  (physiological,  technical  efﬁciency,  neurological  response,  muscular  adaptation)  is needed a big base of training. This is built during years.   Childhood The  ﬁrst  “long”  hike  I  did  by  myself  (my  mother  was  walking  in  my  side  but  not  caring  me) was  when  I  was  1.5  years  old,  and  it  was  5  hours.  When  I  was  a  kid,  I  was  living  with  my<br />
  <br />
  parents and sister in a mountain hut (Cap del Rec) in the Pyrenees at 2.000 m. On winter it is a cross country ski area so we were going to cross country ski and in summer and spring we were  going  to  play  in  the  forest  around.  I  believe  the  muscular  and  articulation  (ankles, knees…) adaptation as well as the neurotransmission and visual capacities are much easier to build  on  the  early  years,  since  our  body  is  forming  in  a  certain  way  depending  the environment,  needs  and  stimuli  that  gets. At  3  years  old  I  did  my  ﬁrst  cross  country  ski  race (12  km  -  Marxa  Pirineu)  and  my  ﬁrst  ascents  at  the  summits  in  the  area  (1.000  m  elevation gain).  At  5  years  old  ﬁrst  3.000  m  summits  and  crampons  /  ice  axes  couloirs,  at  6  some 4.000m  summits,  at  10  years  old  we  did  the  Pyrenees  crossing  during  42  days,  some  long tours  of  several  days  cycling…  During  this  period  I  was  racing  not  seriously  but  doing  some cross country ski races and cross (running) races. At 11 years old I started to get motivated to train  and  I  did  a  big  amount  of  training  (for  the  age)  in  road  cycling,  and  some  races,  as Transnacions, 150 km.  Teenager  At  13  years  old  I  entered  at  CTEMC  (Centre  de  Tecniﬁcació  d’esquí  de  muntanya  de Catalunya)  and  I  started  training  with  some  plan  and  strategy,  as  well  as  formed  in  technics, biomechanics  of  movement  and  safety  in  the  activities.  Jordi  Canals  was  looking  for  us  in terms  of  technique  and  Maite  Hernandez  was  my  physical  coach.  During  the  ﬁrst  3-4  years of  training  the  most  important  was  not  the  results  but  to  create  a  knowledge  of  how  to  train, to  know  my  body  and  how  it  adapts  to  the  stress,  boost  of  trainings  and  to  know  how  to  be constant and methodic.  Table. Conversations with my coach.  Under  Maite’s  trainings  we  focused  the  training  on  the  volume  (amount  of  hours  in  speciﬁc activity),  discovering  the  intensity  year  by  year  and  some  strength  and  core  training  (2  times per  week).  During  this  period  it  was  also  a  big  focus  in  technical  aspects:  Downhill,  circuit training  (conversions,  transitions,  walk  with  crampons…).  Filming  gliding  on  ﬂat  and  uphill, the movement of poles…<br />
  <br />
  At 18 years old I started to train myself. I was studying Sports Science and I had the discipline and  basic  knowledges  after  some  years  under  Maite’s  direction.  During  all  this  time  I  was increasing the training by +-10% per year. From  18  to  24  years  old  my  main  training  focus  was  big  amount  of  volume  at  high  intensity (N3-4) and to test new trainings and explore my possibilities. At 18 years old I started also to do trail running not only as a summer training but for racing and focus on racing in summer.   To race in ski mountaineering from December until the end of April and in trail running from early  may  to  October  it  isn’t  really  possible  to  do  a  classic  scheduling  (PPG  -  PPS  - Competition  -  Rest  -  Transition).  So  the  plan  was  in  one  Transition  period  -  one  month  of General  Preparation  and  a  stable  shape  long  period,  without  big  shape  peaks. To  do  that  I usually organized my training years from November to October. I used to do 2 weeks easy or rest  at  the  end  of  October.  Then  November  was  normally  a  month  to  spend  in  altitude (Stelvio  or  Tignes)  and  do  a  lot  of  meters  elevation  skiing  at  low  and  medium  intensity. December was still high volume of training but introducing some serious interval training and ﬁrst test races. From January to April it is the ski mountaineering racing season so it is mostly to  keep  training  on  the  free  weeks  (  I  like  to  do  big  weeks  even  between  races)  and  do  the intensity mostly on the races (using the races as intensity training). It is not really a transition between the last ski mountaineering race (normally end of April) to the ﬁrst trail running race (  beginning  -  mid  may).  So  normally  I  did  2  weeks  of  many  kilometers  and  try  to  adapt  and accept  the  pain  of  the  legs  after  6  month  with  no  running.  Then  just  keep  big  volume  in weeks with no races and using races as intensity trainings.  Amount of Endurance Training:                            % Of Sports in Training per Year  Endurance Training I used to train the 88-90% on low intensity (Z1 to Z3) a 8-10% at high intensity (Z4 - Z5) and 2%  at  maximum  intensity  (Z6  -  Z7).  Normally  during  the  pre-racing  period  (October  - November)  I  started  with  making  a  big  volume  at  Z2  and  introducing  slowly  some  Z3 YEARHOURS20026002003600200466720057002006675 *2007812200885220098812010967201110432012109620131094201411 5 0201511 5 020161200201711 4 0 * *TOTALTEMPSDNVsessionssport1201,55642701417SKIMO536,55370100189RUN544253601164CLIMB56,5046BIKE63,51900017Table. Volume of endurance training per year (no gym strength or technical workouts) *Surgery in Patella (3 month without training / ** shoulder surgery 1,5 month without training.<br />
  <br />
  intensity. In the previous months to ﬁrst goals I put on a lot of volume at Z3 and some Z4 and Z5 short work closer to the races.    Some workouts modes I like to do are: Z1:  I  don’t  like  to  work  to  many  hours  at  Z1,  only  after  races  or  the  day  before  a  race:  short workouts, 30 or 40 minutes. Z2:  Is  one  of  the  zones  where  I  spend  the  most  part  of  the  volume  of  training.  I  like  to  do long trainings, from 3 to 10 h at this intensity, to create a big volume. Trying to use the uphills to  go  at  the  higher  part  (or  Z3)  and  use  ﬂats  and  downhills  at  the  middle-lower  part. These trainings  are  basics  for  me  to  create  a  big  lipid  adaptation,  as  normally  I  do  these  trainings without  any  energy  intake.  And  to  get  the  body  to  get  more  optimized  at  energy  transfer  to when doing long distances. Z3: I do a lot of volume at Z3. I like to do a big amount of fast volume. In the racing period I almost only train at Z3 when is volume workouts (z1 to recovery and some z2 in longer than 4h trainings). I like to do some long repetitions, as 30 min to 1 h uphill repetitions starting at lower Z3 and ﬁnishing at higher Z3-Z4. With some 10-20 min (downhill) recovery and repeat 3-4 times at early season and some longer 1 to 3 hours still trainings at z3 during the season. Z4:  As  in  the  z3  workouts,  I  like  to  ﬁnish  uphills  (last  5-10  min)  at  Z4,  some  speciﬁc workouts I do are 4 to 5 min repetitions at the beginning of the season to get adapted to the tempo and longer 10-30 min intervals (3 to 5 repetitions) later on the season. Z5:  I  use  to  do  some  30  sec  -  30  sec  workouts  (or  40-20)  at  this  zone  during  15  to  20 repetitions.  But  only  around  10  times  per  season.  I  use  short  races  (Vertical  Kilometers  or Vertical  Races)  to  do  workouts  at  this  intensity,  or  some  last  minutes  of  uphills  in  some  fast trainings. Strength and Speed Training I  was  doing  2-3  times  per  week  strength  training  from  13  to  18  years  old  (40%  core stabilization  and  60%  strength  training  of  arms  and  legs)  During  the  last  years  (20–28  years old), I have not done any strength training but increasing the amount of Climbing training (is not  speciﬁc  strength  training  but  a  way  to  train  both  core  and  upper  body  strength.  (60  h year). Also in Ski Mountaineering training during the downhill (a bit less in trail running) is a strength isometric exercise training. Last  year  I  have  started  with  speciﬁc  strength  training. A  typical  strength  session  consisted  of 20  min  of  core/stabilization  exercises  followed  by  30  min  of  strength  training  (arms,  upper body and quads).  Some speciﬁc exercises can be performed also in the outdoors, in both ski mountaineering as in  some  trail  running  (uphill  races,  races  with  steep  ascents)  it  is  very  important  to  have  a ZONEMETHODDESCRIPTIONMAXIMUM TIME% VO2maxWORKOUTS EXAMPLESI1RecuperationRecovery&gt; 6h&lt; 6530-40’ easy runI2Aerobic lipidEndurance base2h30-100h65-755-10h run in mountainsI3Aerobic CapacityRythme / tempo1h-2h3075-854x20’ uphill / 2x1h / 2h tempoI4Aerobic PowerRacing pace20 min to 1h85-958x5’ / 10x2’ / 3x 10’ / 3x 20’ / 2x40’-1hI5Anaerobic ThresholdVMA, VO2 max5-10 min10010x2’/ 8x4’ / 4x6’/ 2’-3’-4’-5’-6’-5’-4’-3’-2’I6Anaerobic CapacityLactate capacity30 s to  2 minns30x30’’ /15x40’’ / 10x1’I7Anaerobic alacticShort sprint7-20 sns5x10’’ / 3x 20’’<br />
  <br />
  great  balance  between  Vo2max  and  anaerobic  threshold  and  reactive  strength  of  the  legs (achilles tendon, calf, hamstrings, gluteus) to run/ski longer steps. I often do a 40 minutes - 1 h run uphill on steep terrain doing series of 2 or 5 minutes of (1) high frequency of short steps (160-190  steps  per  minute)  then  (2)  low  frequency  of  almost  maximal  length  steps  (50  to  75 steps per minute).  Exercise Modes and Organization of the Season: I  really  divide  my  year  in  2  parts:  may  to  October  only  running  as  main  sport  (cycling  - climbing  too)  and  November  to  May  Ski  mountaineering.  In  a  year,  the  45-47%  of  the training (570 ± 50 h) is done running, 95% of this in technical terrain in the mountains, a 5% in  ﬂatter  terrain  in  good  trails  or  route.  In  elevation  the  running  represents  the  37-40% (250.000  ±  20.000  m).  Same  amount  of  training  is  in  Ski  Mountaineering,  it  represents  the 45-47%  of  hours  (550  ±  50  h)  but  it  represents  a  bigger  proportion  of  the  elevation,  the 55-60% (350.000 ± 50.000 h). When I was younger I used to do much more road cycling to combine  in  summer  with  running  (50%-50%)  but  since  I  started  taking  running  more seriously  at  18  years  old  cycling  has  dropped  to  a  2-4%  (15-70h).  Sport  Climbing  represents a 4-5% of the training and other sports as roll skiing can represent between a 0 to a 4%. If  a  season  is  ﬁlled  with  many  different  conditions  /  skills  required,  I  think  the  blocs  system works very well. That means organizing the season (or a biennial plan) in different blocks of 2 to 10 weeks with a main focus on. For example: Bloc  1:  4  weeks  sport  climbing.  (main  goal  is  to  improve  the  climbing  skills  and  grade  and strength). Bloc  2:  8  weeks  of  endurance  training  (can  be  in  ski,  cycling  or  running  or  combining,  but working mostly in endurance trainings z2 to z4). Bloc  3:  3  weeks  of  speed  training  (working  mostly  in  running  skills  in  ﬂat  and  speed  at  z4 and z5). Bloc 4: 1 week of climbing remainder. Bloc 5: 2 weeks of alpinism skills (endurance at low intensity in technical terrain). So building the season to have intense periods to build some speciﬁc quality and organizing depending where the races or activities are and knowing how much and fast one quality get weaker. Then is important to do always a base to keep the other qualities some work to “keep in body memory” (3-4 short endurance runs during a climbing week, 2-3 times 1 h climbing session during endurance weeks…) Altitude Training I was living until 10 years old permanently at 2000 m, then from 17 to 23 between 2000 and 2500 m. The last 10 years I have been living in Chamonix Valley (1000-1400 m) and Norway (0 m) but spending many days in altitude. Total annual days spent at altitude has been 100 ± 30  (over  2000  m)  from  which  1250  h  (52  days)  over  4000  m  (last  4  years  with  expeditions).  Total  training  volume  at  altitude  ranged  from  300  to  465  h,  accounting  for  33-40%  of  the total annual training volume. The average weekly training volume is higher in altitude camps (~25 h) to (~35 h) but mostly at Z2-Z3. The  distribution  in  the  year  variates  but  normally  is  an  altitude  camp  in  November  (~15 days),  Some  altitude  days  in  December.  Then  just  few  days  or  none  during  the  ski  season.<br />
  <br />
  Some  days  (~30-50)  in  early  spring  (April-May)  in  Alps  or  Himalayas.  And  Some  weeks distributed during the summer (30-50 days from June to October).  Tapering toward Important races The amount of volume remained stable across all prior weeks to races. Normally I do a stable training  all  the  year,  not  looking  for  shape  high  points  but  to  remain  in  a  stable  shape. The speciﬁc race preparation can be from 1 month to 2 weeks. I would start to do a speciﬁc training 1 month before if it is a big difference between the race characteristics and my average training characteristics (look to next point - Adjust Training to Conditions).  If  it  is  a  race  developing  in  normal  conditions  (on  mountain  terrain  -  altitude between  0  to  4000  m)  I  would  start  preparation  2  weeks  before  the  race  with  one  week  of speciﬁc training ( train on similar conditions of the race (elevations, duration of the trainings, intensity, increasing the high intensity training, running ﬂatter or steeper…) If it is just a week by week racing weekend I will just do a normal pre-race week. The  week  of  the  race  (if  race  is  Sunday)  I  usually  train  normal  until Wednesday  (can  be  long volume,  up  to  5  h  trainings,  but  trying  to  do  not  more  than  z3  intensity)  During  this  days  I can  do  some  few  repetitions  of  short  intervals  at  z4  (4-5  repetitions  of  5  minutes  maximum) and  some  very  short  hight  intensity  (z5-6  10’’  4  -5  repetitions)  depending  the  kind  of  race. Thursday or Friday (Race Day -3 / -2) I do a full rest day, that I use to travel if the race is in a driving  distance.  2  days  before  the  race  I  do  a  short  1-2h  training  at  z2. The  day  before  the race I do a 30’-40’ z1-z2. ADJUST YOUR TRAINING TO CONDITIONS I believe it is really important to feel completely comfortable in the conditions of the race or activity  to  do.  It  is  important  in  terms  of  movement  adaptation  (ﬂatter  terrain,  steep  terrain, more  climbing,  use  of  different  muscles,  if  it  is  need  to  open  tracks  it  will  be  much  more need  of  legs  slow  strength,  if  it  is  ﬂat  in  low  altitude  muscle  speed  may  be  important…  )  In terms  of  cardiovascular  adaptation  (longer,  shorter,  more  or  less  intense…)  but  mostly  in terms  of  visual  cognitive  connection,  feeling  psychologically  conﬁdent  on  the  situation  and to  adapt  the  body  to  the  conditions  (temperature,  humidity,  light,  night,  dangers  as  seracs, rocks fall, technicality of the terrain, stress of big championships with lot of public, loneliness in wide ranges…) Here some examples of speciﬁc preparations in this matter:    a.  Sierre  Zinal:  Spending  time  (from  one  year  to  some  weeks)  at  altitude  around 2.000-2.500m,  running  ﬂat  fast  trails,  temperate  climate  and  dry  air,  do  big uphills with ﬂat - fast trainings after…, try to lose weight in the upper body and try  to  be  fast  and  light  in  the  legs,  work  on  psychology  to  be  able  to  be  in  a bubble  during  the  race  (not  get  outside  inputs).  Do  many  races  with  high pressure  of  the  result  (world  championships,  important  races…)  to  be  used  to the  feeling  and  get  more  performance  and  excited  than  stress  on  these situations. 
   b.  Matterhorn:  I  climb  10  times  to  the  summit,  knowing  at  every  moment  the route,  the  grip  of  the  shoes  on  the  different  orientations,  where  the  sun  was<br />
  <br />
  touching at every hour of the day…
    c. Everest:  to  be  comfortable  alone  in  unexpected  conditions,  spend  many  days outside  alone,  for  10  to  50  h  on  technical  terrain,  on  the  limit  of  conditions  (snowing,  night,  avalanche  risk,  during  30+  h…)  doing  on  the  outside comfortable  zone  in  technical  levels  to  ﬁnally  feel  comfortable  and  no  stress when going to stressful situations. Build legs power opening track and do some pre-acclimatization:   http://stories.kilianjornet.cat/pdf/Protocol_Acclimatisation_Everest_2017.pdf   WORKING ON NON PHYSICAL ASPECTS  It  is  common  to  see  athletes  that  have  a  big  physical  potential  but  never  do  good  results  or some  that  are  much  stronger  training  than  on  the  day  of  the  race  of  activity.  It  is  very important  on  training  the  body  to  have  the  best  physical  capacities  possibles  of  us  but  it  is also  very  important  to  work  on  other  aspects  that  ﬁnally  make  us  to  win  or  lose  races,  to  be more efﬁcient and safe. I would say it is 2 very important non-physical aspects to work:  a)Technical  Training:  It  is  the  exercises  to  execute  every movement  and  action  the  fastest  and  more  efﬁcient possible  (lose  the  less  energy  possible  for  the  maximum speed  and  precision).  For  that  it  is  important  to  work biomechanics  of  our  movement  (ﬁlming  how  we  run,  ski or  do  any  activity)  and  then  identifying  where  we  can improve  and  do  speciﬁc  exercises  for  that. Also  it  is  a  lot of  repetition  of  technical  movements  (transitions, conversions,  to  put  on  and  out  skins,  transition  from uphill to downhill, but also make a belay, put protections, research  with  DVA,  transition  uphill  downhill  in  running, technical  terrain  when  it  is  rocks,  slippery  grass…)  until they  became  automatic  and  then  we  will  do-it  in  very different  conditions  (windy,  with  the  eyes  blind, answering maths questions, upside down…). Finally, an interesting exercise is to visualize those  actions. When  we  are  in  the  bed  or  in  the  transport,  and  before  a  race  or  during the  race,  we  are  arriving  to  this  section  to  imagine  each  part  of  the  movement,  every detail. I train on technical aspects 1/3 1/4 of the hours I spend doing endurance training. Sometimes  that  can  be  combined  (doing  a  circuit  training:  a  200  m  uphill  with  different technical  sections,  so  it  is  a  technical  work  as  well  as  a  physical  work),  other  times  this training  will  be  independent,  doing-it  at  home  some  movements  repetitions  or  after  the physical training spending some time to do the exercises.  b)Strategy and preparation: The strategy during one race or activity will make us to success or to fail in many cases. It is many athletes that perform training and then when in a race<br />
  <br />
  with  the  stress  or  on  a  big  mountain  with  problems  and  some  crucial  decisions  to  take they underperform. For that, I would say the most important is to be really used to do the activity  and  in  very  different  conditions  to  know  how  we  react,  what  is  happening  and why.  So,  it  is  important  to  do  many  preparation  races  before  a  race  goal  or  to  do  many climbing  in  different  situations  and  increasing  exposure  and  difﬁculties  before  one activity  goal.  Same  for  testing  everything  (equipment,  sleeping,  nutrition,  hydration…) during many times before to put in real practice in a goal. And ﬁnally we need to make a plan, to know exactly what we want to do during the goal in terms of pace, strategy with or  against  other  athletes,  food,  equipment,  transitions…  During  the  race  or  activity  we need  to  adapt  and  have  the  resources  and  knowledges  to  adapt  on  the  changes  and problems  that  appears,  but  more  than  improvisation  I  would  say  it  is  a  continued adaptation of the plan, so we never get out of resources or with a surprise.        Table. Food and pace strategy for my ﬁrst UTMB in 2008 EXPLORE YOUR BODY LIMITS ON SAFETY CONDITIONS To  know  well  your  capacities  and  how  your  body  works,  it  can  be  interesting  to  do  some extreme workout experiments or tests. This should be done after a good base of training (5-6 years of good training) and before and far away from goals (at least some month, in case it is a  big  damage  that  can  affect  seriously  the  following  month  of  training  or  racing).  It  is  to  try where  are  your  limits  in  different  training  aspects  and  physiological  capacities  and  do-it  in  a safe  area  (close  to  your  home,  somewhere  where  is  people  that  can  take  you  home  or  to hospital  if  you  pass  out,  if  trying  technical  skills  of  psychological  skills  do-it  roped  or somewhere  if  you  fall  you  don’t  get  injured,  etc.).  Here  just  a  few  examples  of  tests  I  have been doing: -Energy  metabolism: To  know  how  much  my  body  was  able  to  keep  working  without  any food  I  was  training  normally  (2-3h  morning  -  Font  Romeu-Bouilloses  area)  and  1  easy  run afternoon  without  any  food  (only  water  during  the  runs  or  home).  1st  day  I  was  hungry,<br />
  <br />
  2nd  day  I  lost  the  power  but  keep  an  ok  endurance  speed  that  remained  until  the  5th  day when  during  the  morning  run  I  pass  out.  Before  doing  that  I  have  always  done  many  days running  up  to  8-10  hours  without  food.  I  now  use  to  train  always  without  food  if  it  is  not more than 7-8h workouts. During last year (2017) expedition in Everest I was doing 2 long pushes  (+-  35  h)  without  many  food  (5  gels  -  1  l  of  water)  in  high  altitude  and  intense exercise.  During  the  2nd  push  the  accumulation  of  lack  of  glucose  made  my  brain  to  get some  temporary  dysfunction  (my  body  was  working  well  in  lipids  but  the  brain  had  not glucose) so after a short stop ATP was metabolized and work normal again.  -Drinking:  when  I  was  13-14  years  old  we  did  some  long  hikes  and  run  tours  without  any water  (10  to  15  h). Testing  in  cold  and  wet  climates  I  have  been  able  to  run  for  100  km (run in the Pyrenees) or up to 26h (in the Alps) without any water and feeling ok. In warm and dry climate (Western States, ~40°C) I had been not drinking much (3,5 liters) and after 100 km I had lots of full body cramps and a beginning of kidney failure.  -Altitude  /Acclimatization:  Since  my  ﬁrst  experience  in  hight  altitude  in  2012  I  have  been testing  different  ways  to  acclimatize  with  some  small  improvements  (Khumbu  2015,  in  2 days from Kathmandu to 5000m-in 5 days to 6300 with good feelings), some big mistakes (Aconcagua  2014-to  much  hard  training  in  hight  altitude  and  no  rest,  then  beginning  of brain  edema),  until  ﬁnd  a  great  protocol  in  2017  ( http://stories.kilianjornet.cat/pdf/Protocol_Acclimatisation_Everest_2017.pdf ). -Hight  intensity  in  hight  altitude:  In  2008  living  at  2.500  m  in  Sierra  Nevada  I  was  going to top of Veleta 3392 m and doing maximum intensity for longtime (30’’-30’’ at z7 for 45’) for  some  weeks  with  some  overtraining  problems  and  then  ﬁguring  the  good  adjustment in  the  repetitions  and  recovery  times  to  do  high  speed  in  high  altitude. After  I  have  been trying  some  kind  of  z7  intensity  workouts  on  short  sprints  20-30’’  x  10  rep  at  very  high altitude  (5000-6000  m)  with  short  recovery  30’’-  1  min  with  bad  results  but  better  results on less repetitions (5-6) and longer recovery (2-5’). Same test with workouts at z3 at 6000 m.  Doing  20h/week  for  2  weeks  made  a  period  of  1  week  really  tired,  but  interesting  for some  kind  of  feelings  and  very  hard  workouts,  and  a  6-8  h/week  made-it  ok  to  feel  good for many weeks.    -Climbing  /  skiing  skills: To  ﬁnd  climbing  skills  to  be  comfortable  in  some  soloing  in  the mountains,  working  many  hours  in  rock  and  ice  climbing  in  total  safety  (tope-rope  and sport  climbing).  Same  for  skiing,  to  ski  some  turns  very  steep  slopes  (55-57-60-62°)  in different snow qualities (ice, spring snow, powder…) in the borders of slopes or very short sections  until  the  skis  had  no  more  grip  or  trying  ways  to  do  the  turns,  and  falling  many times without consequences to know exactly the grip on steepness and snow quality when I was going to the mountains. CONCLUSION AND RACING Training  for  endurance  and  mountain  sports  is  a  long  process  with  up  and  downs  that requires  lot  of  time  and  dedication,  study  of  the  sport  to  understand  the  needs  in  terms  of<br />
  <br />
  physiology, biomechanics and psychology that requires and study of yourself to know how is your body and where it need to work and how it accepts and adapt to training charges. Then dedication  and  methodology  to  spend  years  of  training  following  a  plan  with  a  lot  of  failure and  worst  results  than  expected  to  arrive  at  success.  It  is  only  with  all  these  parameters  that we can decide which are our goals and elaborate a concrete plan to reach-it. More we have been  training  and  racing  more  we  will  understand  our  body  and  be  able  to  perform.  If conditions (external or internal) are not good, ﬁnding resources (strategies, race management, pushing  more  or  less  in  some  strength  or  weaknesses,  taking  away  stress…)  to  have  good results.  Acknowledgments I  would  like  to  thank  all  the  people  who  have  been  coaching  me  in  my  career;  my  parents, all  the  coaches  in  CTEMC  Ferran  Vilella  and  Maite  Hernandez,  technical  coaches  Jordi Canals,  Alfons  Valls.  My  teachers  in  STAPS  Font  Romeu,  the  physiologists  that  publish  the researches  and  share  the  training’s  they  do  to  inspire  and  take  ideas.  To  the  physiologist  I have learn and talk (Jean-Louis Bal, Javi Arguelles, Javier Martin, Gil Orriols, Arnau Anguera, Steve  House,  Scott  Johnson,  Grégoire  Millet…)  Some  climbing  and  training  friends  and partners for they knowledge sharing as Seb Montaz, Ueli Steck, Jordi Tosas, Vivian Bruchez…


title: nuclio/nuclio
url: https://github.com/nuclio/nuclio
created_at: 2018-01-11 12:47:32
updated_at: 2018-01-11 12:47:32
mimetype: text/html
language: en
domain_name: github.com
preview_picture: https://avatars1.githubusercontent.com/u/28734234?s=400&v=4
http_status: 200
content:
  <h3>
        
        README.md
      </h3>
        <p><a href="https://travis-ci.org/nuclio/nuclio" rel="nofollow"><img src="https://camo.githubusercontent.com/812436ccc7e07dd47f959c84309d5bc6b18becee/68747470733a2f2f7472617669732d63692e6f72672f6e75636c696f2f6e75636c696f2e7376673f6272616e63683d6d6173746572" alt="Build Status" /></a>
  <a href="https://goreportcard.com/report/github.com/nuclio/nuclio" rel="nofollow"><img src="https://camo.githubusercontent.com/262dae2937d08301f25acf1b4d94d2ba110df209/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6e75636c696f2f6e75636c696f" alt="Go Report Card" /></a>
  <a href="https://lit-oasis-83353.herokuapp.com/" rel="nofollow"><img src="https://camo.githubusercontent.com/978a85488dbd36bfc0dc857bcd32034febe60f7c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736c61636b2d6a6f696e253230636861742532302545322538362539322d6530313536332e737667" alt="Slack" /></a></p>
  <p style="text-align: center;"><a href="https://github.com/nuclio/nuclio/blob/master/docs/assets/images/logo.png" target="_blank"><img src="https://github.com/nuclio/nuclio/raw/master/docs/assets/images/logo.png" width="180" alt="image" /></a></p>
  <p style="text-align: center;">
  Visit <a href="https://nuclio.io" rel="nofollow">nuclio.io</a> for product information and news and a friendly web presentation of the nuclio <a href="https://nuclio.io/docs/latest/" rel="nofollow">documentation</a>.
  <br />Check out the <b><a href="https://github.com/nuclio/nuclio#global-nuclio-hackathon">global nuclio hackathon</a></b> for a some serverless fun and a chance to win a Phantom 4 drone!
  </p>
  <h4><a href="https://github.com/nuclio/nuclio#in-this-document" class="anchor" id="user-content-in-this-document"></a>In this document</h4>
  <ul><li><a href="https://github.com/nuclio/nuclio#overview">Overview</a></li>
  <li><a href="https://github.com/nuclio/nuclio#why-another-serverless-project">Why another "serverless" project?</a></li>
  <li><a href="https://github.com/nuclio/nuclio#quick-start-steps">Quick-start steps</a></li>
  <li><a href="https://github.com/nuclio/nuclio#high-level-architecture">High-level architecture</a></li>
  <li><a href="https://github.com/nuclio/nuclio#function-examples">Function examples</a></li>
  <li><a href="https://github.com/nuclio/nuclio#global-nuclio-hackathon">Global nuclio hackathon</a></li>
  <li><a href="https://github.com/nuclio/nuclio#further-reading">Further reading</a></li>
  </ul><h2><a href="https://github.com/nuclio/nuclio#overview" class="anchor" id="user-content-overview"></a>Overview</h2>
  <p>nuclio is a new "serverless" project, derived from iguazio's elastic data life-cycle management service for high-performance events and data processing. You can use nuclio as a standalone binary (for example, for IoT devices), package it within a Docker container, or integrate it with a container orchestrator like <a href="https://kubernetes.io" rel="nofollow">Kubernetes</a>.</p>
  <p>nuclio is extremely fast. A single function instance can process hundreds of thousands of HTTP requests or data records per second. This is 10-100 times faster than some other frameworks. To learn more about how nuclio works, see the nuclio <a href="https://github.com/nuclio/nuclio/blob/master/docs/concepts/architecture.md">architecture</a> documentation and watch the <a href="https://www.youtube.com/watch?v=xlOp9BR5xcs" rel="nofollow">technical CNCF nuclio presentation and demo</a> (slides can be found <a href="https://www.slideshare.net/iguazio/nuclio-overview-october-2017-80356865" rel="nofollow">here</a>).</p>
  <blockquote>
  <p><strong>Note:</strong> nuclio is still under active development and is not recommended for production use.</p>
  </blockquote>
  <h2><a href="https://github.com/nuclio/nuclio#why-another-serverless-project" class="anchor" id="user-content-why-another-serverless-project"></a>Why another "serverless" project?</h2>
  <p>We considered existing cloud and open-source serverless solutions, but none addressed our needs:</p>
  <ul><li>Real-time processing with minimal CPU and I/O overhead and maximum parallelism</li>
  <li>Native integration with a large variety of data sources, triggers, and processing models</li>
  <li>Abstraction of data resources from the function code - to support code portability, simplicity and data-path acceleration</li>
  <li>Simple debugging, regression testing, and multi-versioned CI/CD pipelines</li>
  <li>Portability across low-power devices, laptops, on-prem clusters and public clouds</li>
  </ul><p>We designed nuclio to be extendable, using a modular and layered approach that supports constant addition of triggers and data sources. We hope many will join us in developing new modules, developer tools, and platforms.</p>
  <h2><a href="https://github.com/nuclio/nuclio#quick-start-steps" class="anchor" id="user-content-quick-start-steps"></a>Quick-start steps</h2>
  <p>The simplest way to explore nuclio is to run its graphical user interface (GUI) of the nuclio <a href="https://github.com/nuclio/nuclio#playground">playground</a>. All you need in order to run the playground is Docker:</p>
  <div class="highlight highlight-source-shell"><pre>docker run -p 8070:8070 -v /var/run/docker.sock:/var/run/docker.sock -v /tmp:/tmp nuclio/playground:stable-amd64</pre></div>
  <p><a href="https://github.com/nuclio/nuclio/blob/master/docs/assets/images/playground.png" target="_blank"><img src="https://github.com/nuclio/nuclio/raw/master/docs/assets/images/playground.png" alt="playground" /></a></p>
  <p>Browse to <a href="http://localhost:8070" rel="nofollow">http://localhost:8070</a> and deploy one of the example functions, or write your own function. When run outside of an orchestration platform (for example, Kubernetes or Swarm), the playground will simply deploy to the local Docker daemon.</p>
  <p>For a complete step-by-step guide to using nuclio over Kubernetes, either with the playground UI or the nuclio command-line interface (<code>nuctl</code>), see <a href="https://github.com/nuclio/nuclio/blob/master/docs/setup/k8s/getting-started-k8s.md">Getting Started with nuclio on Kubernetes</a> or <a href="https://github.com/nuclio/nuclio/blob/master/docs/setup/gke/getting-started-gke.md">Getting Started with nuclio on Google Kubernetes Engine (GKE)</a>.</p>
  <h2><a href="https://github.com/nuclio/nuclio#high-level-architecture" class="anchor" id="user-content-high-level-architecture"></a>High-level architecture</h2>
  <p>The following image illustrates nuclio's high-level architecture:</p>
  <p><a href="https://github.com/nuclio/nuclio/blob/master/docs/assets/images/architecture.png" target="_blank"><img src="https://github.com/nuclio/nuclio/raw/master/docs/assets/images/architecture.png" alt="architecture" /></a></p>
  <p>Following is an outline of the main architecture components. For more information about the nuclio architecture, see <a href="https://github.com/nuclio/nuclio/blob/master/docs/concepts/architecture.md">Architecture</a>.</p>
  <h3><a href="https://github.com/nuclio/nuclio#services" class="anchor" id="user-content-services"></a>Services</h3>
  <h4><a href="https://github.com/nuclio/nuclio#processor" class="anchor" id="user-content-processor"></a>Processor</h4>
  <p>A processor listens on one or more triggers (for example, HTTP, Message Queue, or Stream), and executes user functions with one or more parallel workers.</p>
  <p>The workers use language-specific runtimes to execute the function (via native calls, shared memory, or shell). Processors use abstract interfaces to integrate with platform facilities for logging, monitoring and configuration, allowing for greater portability and extensibility (such as logging to a screen, file, or log stream).</p>
  <h4><a href="https://github.com/nuclio/nuclio#controller" class="anchor" id="user-content-controller"></a>Controller</h4>
  <p>A controller accepts function and event-source specifications, invokes builders and processors through an orchestration platform (such as Kubernetes), and manages function elasticity, life cycle, and versions.</p>
  <h4><a href="https://github.com/nuclio/nuclio#playground" class="anchor" id="user-content-playground"></a>Playground</h4>
  <p>The playground is a standalone container microservice that is accessed through HTTP and includes a code-editor GUI for editing, deploying, and testing functions. This is the most user-friendly way to work with nuclio. The playground container comes packaged with a version of the nuclio <a href="https://github.com/nuclio/nuclio#builder">builder</a>.</p>
  <h4><a href="https://github.com/nuclio/nuclio#builder" class="anchor" id="user-content-builder"></a>Builder</h4>
  <p>A builder receives raw code and optional build instructions and dependencies, and generates the function artifact - a binary file or a Docker container image that the builder can also push to a specified image repository. The builder can run in the context of the CLI or as a separate service, for automated development pipelines.</p>
  <h4><a href="https://github.com/nuclio/nuclio#dealer" class="anchor" id="user-content-dealer"></a>Dealer</h4>
  <p>A dealer is used with streaming and batch jobs to distribute a set of tasks or data partitions/shards among the available function instances, and to guarantee that all tasks are completed successfully.
  For example, if a function reads from a message stream with 20 partitions, the dealer will guarantee that the partitions are distributed evenly across workers, taking into account the number of function instances and failures.</p>
  <h3><a href="https://github.com/nuclio/nuclio#function-concepts" class="anchor" id="user-content-function-concepts"></a>Function concepts</h3>
  <h4><a href="https://github.com/nuclio/nuclio#triggers" class="anchor" id="user-content-triggers"></a>Triggers</h4>
  <p>Functions can be invoked through a variety of event sources that are defined in the function (such as HTTP, RabbitMQ, Kafka, Kinesis, NATS, DynamoDB, iguazio v3io, or schedule). Event sources are divided into several event classes (req/rep, async, stream, pooling), which define the sources' behavior. Different event sources can plug seamlessly into the same function without sacrificing performance, allowing for portability, code reuse, and flexibility.</p>
  <h4><a href="https://github.com/nuclio/nuclio#data-bindings" class="anchor" id="user-content-data-bindings"></a>Data bindings</h4>
  <p>Data-binding rules allow users to specify persistent input/output data resources to be used by the function. (Data connections are preserved between executions.) Bound data can be in the form of files, objects, records, messages, etc. The function specification may include an array of data-binding rules, each specifying the data resource and its credentials and usage parameters. Data-binding abstraction allows using the same function with different data sources of the same type, and enables function portability.</p>
  <h4><a href="https://github.com/nuclio/nuclio#sdk" class="anchor" id="user-content-sdk"></a>SDK</h4>
  <p>The nuclio SDK is used by function developers to write, test, and submit their code, without the need for the entire nuclio source tree.</p>
  <h2><a href="https://github.com/nuclio/nuclio#function-examples" class="anchor" id="user-content-function-examples"></a>Function examples</h2>
  <p>The following sample function implementation uses the <code>Event</code> and <code>Context</code> interfaces to handle inputs and logs, returning a structured HTTP response; (it's also possible to use a simple string as the returned value).</p>
  <p>In Go</p>
  <div class="highlight highlight-source-go"><pre>package handler
  import (
      "github.com/nuclio/nuclio-sdk"
  )
  func Handler(context *nuclio.Context, event nuclio.Event) (interface{}, error) {
      context.Logger.Info("Request received: %s", event.GetPath())
      return nuclio.Response{
          StatusCode:  200,
          ContentType: "application/text",
          Body: []byte("Response from handler"),
      }, nil
  }</pre></div>
  <p>In Python</p>
  <div class="highlight highlight-source-python"><pre>def handler(context, event):
      response_body = f'Got {event.method} to {event.path} with "{event.body}"'
      # log with debug severity
      context.logger.debug('This is a debug level message')
      # just return a response instance
      return context.Response(body=response_body,
                              headers=None,
                              content_type='text/plain',
                              status_code=201)</pre></div>
  <p>More examples can be found in the <strong><a href="https://github.com/nuclio/nuclio/blob/master/hack/examples/README.md">hack/examples</a></strong> nuclio GitHub directory.</p>
  <h2><a href="https://github.com/nuclio/nuclio#global-nuclio-hackathon" class="anchor" id="user-content-global-nuclio-hackathon"></a>Global nuclio Hackathon</h2>
  <p><a href="https://nuclio.devpost.com/" rel="nofollow">Sign up</a> for the global online nuclio hackathon, build the greatest serverless application, and you just might win a Phantom 4 drone!</p>
  <p>Judges include</p>
  <ul><li>
  <p><strong>Brendan Burns</strong><br />Kubernetes Co-Founder</p>
  </li>
  <li>
  <p><strong>Lee Calcote</strong><br />Head of Technology Strategy, SolarWinds</p>
  </li>
  <li>
  <p><strong>Yaron Haviv</strong><br />CTO, iguazio</p>
  </li>
  <li>
  <p><strong>Orit Nissan-Messing</strong><br />Chief Architect, iguazio</p>
  </li>
  </ul><p>Submissions will be accepted until Jan 29 2018. <a href="https://nuclio.devpost.com/" rel="nofollow">Register</a> now.</p>
  <h2><a href="https://github.com/nuclio/nuclio#further-reading" class="anchor" id="user-content-further-reading"></a>Further reading</h2>
  <ul><li>Setup
  <ul><li><a href="https://github.com/nuclio/nuclio/blob/master/docs/setup/k8s/getting-started-k8s.md">Getting Started with nuclio on Kubernetes</a></li>
  <li><a href="https://github.com/nuclio/nuclio/blob/master/docs/setup/gke/getting-started-gke.md">Getting Started with nuclio on Google Kubernetes Engine (GKE)</a></li>
  <li>Getting Started with nuclio On Raspberry Pi (coming soon)</li>
  </ul></li>
  <li>Concepts
  <ul><li><a href="https://github.com/nuclio/nuclio/blob/master/docs/concepts/architecture.md">Architecture details</a></li>
  <li><a href="https://github.com/nuclio/nuclio/blob/master/docs/concepts/configuring-a-function.md">Configuring a Function</a></li>
  <li>Build Process (coming soon)</li>
  <li>Deploy Process (coming soon)</li>
  <li>Kubernetes
  <ul><li><a href="https://github.com/nuclio/nuclio/blob/master/docs/concepts/k8s/function-ingress.md">Invoking Functions by Name with a Kubernetes Ingress</a></li>
  <li><a href="https://github.com/nuclio/nuclio/blob/master/docs/concepts/k8s/private-docker-registries.md">Private Docker Registries</a></li>
  </ul></li>
  </ul></li>
  <li><a href="https://github.com/nuclio/nuclio/blob/master/hack/examples/README.md">Examples</a></li>
  <li><a href="https://github.com/nuclio/nuclio/blob/master/ROADMAP.md">Roadmap</a></li>
  <li>Contributing
  <ul><li><a href="https://github.com/nuclio/nuclio/blob/master/docs/devel/coding-conventions.md">Code conventions</a></li>
  <li><a href="https://github.com/nuclio/nuclio/blob/master/docs/devel/contributing.md">Contributing to nuclio</a></li>
  </ul></li>
  <li>Reference
  <ul><li><a href="https://github.com/nuclio/nuclio/blob/master/docs/reference/nuctl/nuctl.md">nuctl Reference</a></li>
  </ul></li>
  <li>Media
  <ul><li><a href="https://thenewstack.io/whats-next-serverless/" rel="nofollow">nuclio and the Future of Serverless Computing</a></li>
  <li><a href="https://hackernoon.com/nuclio-the-new-serverless-superhero-3aefe1854e9a" rel="nofollow">nuclio: The New Serverless Superhero</a></li>
  </ul></li>
  </ul><p>For support and additional product information, <a href="https://lit-oasis-83353.herokuapp.com" rel="nofollow">join</a> the active <a href="https://nuclio-io.slack.com" rel="nofollow">nuclio Slack</a> workspace.</p>


created_at: 2018-01-11 13:55:05
updated_at: 2018-01-11 13:55:05
mimetype: text/html
language: fr
domain_name: www.developpez.com
preview_picture: https://www.developpez.com/images/logos/angular.png
http_status: 200
title:
  Angular 5.0 est disponible, la nouvelle version du framework JavaScript de Google veut faciliter la création d'applications Web progressives

url:
  https://www.developpez.com/actu/170633/Angular-5-0-est-disponible-la-nouvelle-version-du-framework-JavaScript-de-Google-veut-faciliter-la-creation-d-applications-Web-progressives/

content:
  <img src="https://www.developpez.com/images/logos/angular.png" alt="image" />&#13;
  								Après avoir été repoussée à deux reprises, la sortie d’Angular 5.0 a été finalement annoncée le 1<sup>er</sup> novembre. Comme <a href="https://www.developpez.com/actu/125326/Angular-4-0-est-disponible-la-nouvelle-version-du-framework-JavaScript-de-Google-promet-des-applications-plus-petites-et-plus-rapides/" target="_blank">Angular 4</a> publié au mois de mars, cette nouvelle version se concentre sur l’objectif de rendre le framework JavaScript de Google plus petit, plus rapide et plus facile à utiliser.<div><img src="http://www.developpez.com/public/images/news/Angular-5.png" alt="image" /></div><br />&#13;
  Angular 5 est destiné à simplifier la création d'applications Web progressives (PWA), étant donné qu'à ce jour, la prise en charge de ces applications dans le framework nécessite beaucoup d'expertise de la part des développeurs. Rappelons que le concept d'applications Web progressives, fruit d'une collaboration entre Google et Mozilla, vise à permettre le développement d'applications Web offrant sur un mobile une expérience de qualité supérieure, à peu près la même qu'une application native.<p>Cela peut être réalisé à travers trois techniques différentes, y compris via les service workers, comme c'est le cas avec Angular 5.0. Les service workers jouent essentiellement le rôle de serveurs proxy placés entre une application Web, et le navigateur ou le réseau (lorsque disponible). Ils sont destinés (entre autres choses) à permettre la création d'expériences de navigation déconnectée efficaces, en interceptant les requêtes réseau et en effectuant des actions appropriées selon que le réseau est disponible et que des ressources mises à jour sont à disposition sur le serveur. Ils permettront aussi d'accéder aux API de notifications du serveur (push) et de synchronisation en arrière-plan.</p><p>Il faut noter que Google est toujours en train de construire le support de cette fonctionnalité dans l'interface en ligne de commande (CLI). Si Angular 5.0 est maintenant disponible, le support pour les applications Web progressives ne devrait donc pas être disponible avant la fin du mois de novembre 2017. Angular 5 veut aussi rendre les composants Material Design compatibles avec le rendu côté serveur. Mais Google doit encore corriger quelques bogues avant de sortir cette fonctionnalité.</p><p>Parmi les nouveautés dans cette version, il faut noter qu'Angular 5 dispose d'un optimiseur de build, qui réduit la taille des applications en éliminant de lui-même les parties de code qui lui semblent inutiles. Le compilateur a également été amélioré pour prendre en charge la compilation incrémentielle, qui permet de réduire les temps de compilation sur les gros projets.</p><p>Entre autres changements, on peut encore noter que la bibliothèque de programmation réactive RxJS (Reactive Extensions for JavaScript) a été mise à jour vers la version 5.5.2 ou ultérieure. En outre, RxJS distribue maintenant une version utilisant des modules ECMAScript. HttpClient a également été mis à jour, et CLI v1.5 va générer les projets Angular 5 par défaut. Vous trouverez le détail et la liste exhaustive des nouveautés d’Angular 5.0 dans le changelog sur GitHub.</p><p>Sources : <a href="https://blog.angular.io/version-5-0-0-of-angular-now-available-37e414935ced" target="_blank">Blog Angular</a>, <a href="https://github.com/angular/angular/blob/master/CHANGELOG.md" target="_blank">changelog (GitHub)</a></p><p><b>Et vous ?</b></p><p><img src="https://www.developpez.net/forums/images/smilies/fleche.gif" alt="" title=":fleche:" class="inlineimg" style="border: 0px;" /> Utilisez-vous Angular ? Si oui, quelles versions ?<br /><img src="https://www.developpez.net/forums/images/smilies/fleche.gif" alt="" title=":fleche:" class="inlineimg" style="border: 0px;" /> Que pensez-vous des nouveautés dans Angular 5 ?			</p>


title: Lance Arsmtrong a-t-il eu recours aux moteurs cachés durant sa carrière ?
created_at: 2018-01-12 09:04:03
updated_at: 2018-01-12 09:04:03
mimetype: text/html
language: fr-FR
domain_name: www.worldbike.fr
http_status: 200
url:
  http://www.worldbike.fr/index.php/2018/01/12/lance-arsmtrong-a-t-il-eu-recours-aux-moteurs-caches-durant-sa-carriere/

content:
  <p>–</p>
  <p>La Légende <strong>Lance Armstrong</strong> revient de nouveau sur le devant de la scène suite à un livre sorti mercredi en librairies, celui de <strong>Philippe Brunel</strong>, journaliste pour L’Equipe intitulé “<strong>Rouler plus vite que la mort</strong>“. Dans cet ouvrage il évoque les possibilités que l’Américain ait eu recours à de possibles moteurs cachés pour améliorer ses performances… Car oui, à cette époque, les moteurs miniatures faisaient leurs premières apparitions grâce notamment à l’inventeur<strong> Istvan Varjas</strong>.</p>
  <p>Voici quelques passages du livre en question: <i>Comme tous les inventeurs, il peut être un personnage très obscur, ambivalent, équivoque. J</i><em>e suis rentré peu à peu en confiance avec lui. Et les choses se sont enchaînées. Il m’a dit : “Voilà, en 1998 on m’a payé 2 millions de dollars pour que je me taise pendant dix ans“. Après, je juxtapose les faits, je procède par collages, par collision d’images. Rien d’autre. Je laisse le lecteur avoir son propre avis. Ce ne sont que des troublantes coïncidences. Pas des preuves”</em></p>
  <p><i><b>Lance Armstrong</b> nous a vendu une légende. Beaucoup de gens ont voulu y croire. Bien des années après devant <strong>Oprah Winfrey</strong>, il dit que tout était faux, qu’il avait menti. On est en droit de se poser la question : jusqu’où <strong>Armstrong </strong>a-t-il menti ? Voilà, c’est tout. Mais je ne l’accuse pas. Je mets en corrélation des événements. </i><em>Il y a eu aussi cette histoire du journaliste irlandais qui l’interrogeait, en 2016, dans l’émission de radio “Off the Ball”. En duplex, à l’improviste, il lui demande s’il a utilisé le moteur. Et, là, <strong>Armstrong </strong>dit : “Vous êtes fou de me poser cette question, ça n’existait pas à mon époque”. <strong>Alors que ça existait. Ou il a menti consciemment. Ou il ne savait pas</strong>.”</em></p>
  <p><i>“Si ça existe depuis vingt ans, est-ce qu’on peut penser qu’une Belge de 18 ans, un amateur italien et un 3e Catégorie en Dordogne (</i><em>les trois cas avérés d’utilisation de moteur)</em><i> ont été les seuls à utiliser ce truc-là ? </i><em>On est dans l’ère du doute. Mais il doit bien y avoir une solution. C’est bien de la part de l’UCI d’avoir nommé <strong>Jean-Christophe Péraud</strong> pour lutter contre la fraude technologique. J’ai l’impression qu’ils prennent les choses avec sérieux. Il est temps d’établir des règles drastiques. Moi, je fais ça parce que j’aime le cyclisme. <strong>Je voudrais que les jeunes puissent s’émouvoir face au Tour et être sûrs que ce qu’ils voient est vraiment réel</strong>“</em></p>
  <p><img class="alignnone wp-image-5012" src="http://www.worldbike.fr/wp-content/uploads/2018/01/463709-lance-armstrong-le-29-aout-2012-lors-du-congres-mondial-sur-le-cancer-a-montreal-au-quebec.jpg" alt="" width="750" height="473" /></p>
  <p><strong>SONDAGE: Votez pour le maillot UCI WORLD TOUR 2018</strong></p>
  	<div>

  <p></p><div class="world-legend-wheels" id="world-644089546"><a href="https://www.legendwheels.com"><img width="1920" height="236" src="http://www.worldbike.fr/wp-content/uploads/2016/12/t50-3.gif" alt="" title="t50" /></a></div>&#13;</div>

preview_picture:
  http://www.worldbike.fr/wp-content/uploads/2018/01/463709-lance-armstrong-le-29-aout-2012-lors-du-congres-mondial-sur-le-cancer-a-montreal-au-quebec.jpg


title: Les services d'entité sont un anti-pattern
url: https://www.infoq.com/fr/news/2018/01/entity-services-antipattern
created_at: 2018-01-12 10:22:24
updated_at: 2018-01-12 10:22:24
mimetype: text/html
domain_name: www.infoq.com
preview_picture: https://cdn.infoq.com/statics_s1_20180110-0356/styles/i/logo-big.jpg
http_status: 200
content:
  <p>Dans une architecture basée sur les microservices, il est important de séparer les différents services. <a href="https://www.infoq.com/news/2007/06/entity-services" rel="nofollow">Les services d'entité</a> sont un <em>pattern</em> commun maintenant appliqué aux microservices, mais [Michael Nygard] (<a href="https://twitter.com/mtnygard" rel="nofollow">https://twitter.com/mtnygard</a>) prétend qu'<a href="http://www.michaelnygard.com/blog/2017/12/the-entity-service-antipattern/" rel="nofollow">ils sont un anti-pattern</a> qui vont à l'encontre de la séparation dans une courte série de billets de blog sur la manière de travailler avec les microservices.</p>
  <p>Nygard, auteur entre autres de <a href="https://pragprog.com/book/mnee2/release-it-second-edition" rel="nofollow">Release It!</a>, note que les services d'entité sont une solution à un problème qui est régulièrement redécouvert, et fait à la fois référence à un <a href="https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/multi-container-microservice-net-applications/data-driven-crud-microservice" rel="nofollow">livre électronique d'architecture sur les microservices de Microsoft</a> et un <a href="https://spring.io/blog/2015/07/14/microservices-with-spring" rel="nofollow">tutoriel de Spring</a> pour deux des nombreux exemples d'utilisation de ce <em>pattern</em>.</p>
  <p>Pour Nygard, un <em>anti-pattern</em> est un modèle qui aggrave les choses. En argumentant que les services d'entité sont en réalité un <em>anti-pattern</em>, il utilise une grande application monolithique traditionnelle en tant qu'exemple. Dans cette application, il existe plusieurs instances du processus avec toutes les fonctionnalités locales et en cours de traitement :</p>
  <p><img alt="" src="https://www.infoq.com/fr/news/2018/01/news/2018/01/entity-services-antipattern/fr/resources/1pic-1515512214733.jpg" /></p>
  <p>En déplaçant cette application vers une architecture microservice, en utilisant un exemple du tutoriel Spring, certaines fonctionnalités seront toujours contenues dans l'un des services, mais Nygard prétend que la plupart des fonctionnalités nécessiteront des agrégats composés de plusieurs entités, créant ainsi des dépendances entre deux ou plusieurs services d'entité. Un exemple est de fixer le prix dans un panier qui impliquera tous les services représentés :</p>
  <p><a href="https://camo.githubusercontent.com/cc2b4b9c7c47154b41df4105811c3fa857bd1c8d/68747470733a2f2f7265732e696e666f712e636f6d2f6e6577732f323031372f31322f656e746974792d73657276696365732d616e74697061747465726e2f656e2f7265736f75726365732f31656e746974795f73657276696365735f322d313531343732313535393132302e6a7067" rel="nofollow" target="_blank"><img alt="" src="https://www.infoq.com/fr/news/2018/01/news/2018/01/entity-services-antipattern/fr/resources/1entity_services_2-1514721559120.jpg" /></a></p>
  <p>Pour Nygard, ces dépendances conduisent à un couplage opérationnel qui affectera la disponibilité, la performance et la capacité. Il remarque également qu'ils créent un couplage sémantique où un changement dans un service peut se répercuter sur d'autres services. Dans le pire des cas, cela peut même aboutir à un service ayant besoin de traiter différentes versions de services.</p>
  <p>Pour Nygard, le contexte résultant du passage à une architecture de microservices avec des services d'entité inclut :</p>
  <ul><li>Les équipes peuvent toujours déployer selon leur propre cadence.</li>
  	<li>Le couplage sémantique nécessite une négociation entre équipes.</li>
  	<li>Les services d'entité sont invoqués dans la plupart des demandes, ce qui augmente la charge.</li>
  	<li>La disponibilité globale est couplée à de nombreux services.</li>
  </ul><p>Par cela, Nygard croit que les critères sont remplis pour prétendre que les services d'entité sont un <em>anti-pattern</em>.</p>
  <p>Dans un autre billet, <a href="https://twitter.com/benmorrisuk/" rel="nofollow">Ben Morris</a>, architecte principal chez Fourth.com, affirme que <a href="http://www.ben-morris.com/entity-services-when-microservices-are-worse-than-monoliths/" rel="nofollow">les services d'entité utilisés dans une architecture de microservices sont plus mauvais qu'un monolithe</a> et fait référence à la publication de Nygard. Morris fait valoir qu'un aspect important des microservices est l'autonomie, mais que plus les services sont fins, plus ils sont couplés à d'autres services, ce qui nuit à cette importante autonomie. Il note que les changements d'un processus peuvent se révéler difficiles car ils ont tendance à toucher de nombreux services, et encore plus s'ils sont gérés par différentes équipes de développement. Un risque lié aux petits services couplés est également que l'échec d'un seul service peut avoir un effet en cascade, entraînant l'échec de plusieurs processus.</p>
  <p>Le poste de Nygard a engendré une longue discussion. L'un des auteurs du livre électronique de Microsoft note que dans l'ouvrage, ils mettent en garde contre le couplage de microservices avec des appels HTTP. Il note également l'importance d'avoir les bons modèles de domaine pour pouvoir rendre les microservices autonomes.</p>
  <p>Dans un article de blog à venir, Nygard se penchera sur les alternatives aux services d'entité.</p>
          
  	
  <div id="contentRatingWidget">
      
      
  <div class="rate-article rate-section">
      <div class="rate-article-header">
          <p class="title">Evaluer cet article</p>
      </div>
      <div class="rate-article-content clearfix">
          <p>
              </p><fieldset id="relevance_fieldset" class="rating"><legend>Pertinence</legend>
                  <label for="relevance-star5" title="Innovator"></label>
                  <label for="relevance-star4" title="Early adopter"></label>
                  <label for="relevance-star3" title="Early majority"></label>
                  <label for="relevance-star2" title="Late majority"></label>
                  <label for="relevance-star1" title="Laggards"></label>
              </fieldset>
          <p>
              </p><fieldset id="style_fieldset" class="rating"><legend class="legend-style">Style</legend>
                  <label for="style-star5" title="Excellent"></label>
                  <label for="style-star4" title="Bon"></label>
                  <label for="style-star3" title="Moyen"></label>
                  <label for="style-star2" title="Acceptable"></label>
                  <label for="style-star1" title="Médiocre"></label>
              </fieldset>
      </div>
  </div>
      
      
      
      
  </div>
          
                          
          
          
          
          
          
          
          
   
          
          
          
                  
          
      
      
      
      
      
      
      
      
      
      


title: 11 Best Low-Carb Taco Recipes | Living Chirpy
url: https://www.livingchirpy.com/2016/11-best-low-carb-taco-recipes/
created_at: 2018-01-12 14:28:11
updated_at: 2018-01-12 14:28:11
mimetype: text/html
language: en-US
domain_name: www.livingchirpy.com
preview_picture: https://www.livingchirpy.com/wp-content/uploads/2016/10/11-Best-Low-Carb-Taco-Recipes.jpg
http_status: 200
content:
  <p><img class="aligncenter size-full wp-image-3045" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/11-Best-Low-Carb-Taco-Recipes.jpg" alt="11 Best Low Carb Taco Recipes" width="667" height="1000" /></p>
  <p>Tacos are always a good idea, no matter what. Seriously. They’re quick. They’re easy. What more could you want? We <em>love</em> tacos here at Chirpy, and we especially love recipes that put a healthy spin on this favorite of ours.</p>
  <p>If you love tacos just as much as the Chirpy crew, you’ll love these 11 Low-Carb Taco Recipes…</p>
  <p><a href="https://www.livingchirpy.com/2016/low-carb-shredded-chicken-tacos/"><img class="aligncenter size-full wp-image-3037" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/low-carb-shredded-chicken-tacos.jpg" alt="Low Carb Shredded Chicken Tacos" width="667" height="1000" /></a></p>
  <p>Who could ever get tired of this classic? (Low-Carb) Shredded chicken tacos for life 🙌🏼!</p>
  <p><a href="http://myhealthyishlife.com/fish-tacos-with-peach-and-strawberry-salsa-whole-30-approved/"><img class="aligncenter size-full wp-image-3033" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/fish-tacos-with-peach-and-strawberry-salsa.jpg" alt="Fish Tacos with Peach and Strawberry Salsa" width="801" height="1113" /></a></p>
  <p>Peach and strawberry fish taco? Weird…but sign me up, please 🖐🏻.</p>
  <p><a href="http://www.gastrosenses.com/blog/salmon-lettuce-tacos/"><img class="aligncenter size-full wp-image-3039" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/salmon-lettuce-tacos.jpg" alt="Salmon Lettuce Tacos" width="850" height="1280" /></a></p>
  <p>If you’re looking for the perfect light lunch, this is it.</p>
  <p><a href="http://www.cookingclassy.com/2015/07/turkey-taco-lettuce-wraps/"><img class="aligncenter size-full wp-image-3040" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/turkey-taco-lettuce-wraps.jpg" alt="Turkey Taco Lettuce Wraps" width="575" height="863" /></a></p>
  <p>Why wait for Christmas to whip out the turkey? Do yourself a favor and make a taco.</p>
  <p><a href="https://www.livingchirpy.com/2016/low-carb-mini-cheese-tacos/"><img class="aligncenter size-full wp-image-3036" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/low-carb-mini-cheese-tacos.jpg" alt="Low Carb Mini Cheese Tacos" width="667" height="1000" /></a></p>
  <p>This would be the perfect thing to share with your family or friends. Or you could skip the friends and family and have them all for yourself 💁🏻.</p>
  <p><a href="http://foodista.com/blog/2016/06/10/30-minute-meal-blackened-shrimp-lettuce-tacos-with-salsa-and-avocado-crema"><img class="aligncenter size-full wp-image-3031" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/blackened-shrimp-lettuce-tacos-with-salsa-and-avocado-crema.jpg" alt="Blackened Shrimp Lettuce Tacos with Salsa and Avocado Crema" width="607" height="400" /></a></p>
  <p>You had me at avocado <i>crema</i> 👄…</p>
  <p><a href="http://www.homeindisarray.com/2013/07/pulled-pork-lettuce-tacos.html"><img class="aligncenter size-full wp-image-3038" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/pulled-pork-lettuce-tacos.jpg" alt="Pulled Pork Lettuce Tacos" width="640" height="360" /></a></p>
  <p>Please help yourself to some deliciousness.</p>
  <p><a href="http://drizzleanddip.com/2014/02/12/lettuce-tacos-with-chipotle-chicken-and-grilled-pineapple-salsa"><img class="aligncenter size-full wp-image-3035" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/lettuce-tacos-with-chipotle-chicken-and-grilled-pineapple-salsa.jpg" alt="Lettuce Tacos with Chipotle Chicken and Grilled Pineapple Salsa" width="700" height="1050" /></a></p>
  <p>This is the flavor explosion you’ve been looking for…</p>
  <p><a href="https://www.livingchirpy.com/2015/blackened-mahi-lettuce-tacos-with-cajun-remoulade/"><img class="aligncenter size-full wp-image-3030" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/blackened-mahi-lettuce-tacos-with-cajun-remoulade.jpg" alt="Blackened Mahi Lettuce Taco with Cajun Remoulade" width="667" height="1000" /></a></p>
  <p>Eat this. You won’t regret it.</p>
  <p><a href="http://heartbeetkitchen.com/2015/recipes/type/main-dish-recipes/fish-taco-lettuce-wraps-aip-paleo/"><img class="aligncenter size-full wp-image-3032" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/fish-taco-lettuce-wraps-with-mango-kiwi-salsa.jpg" alt="Fish Taco Lettuce Wraps with Mango Kiwi Salsa" width="600" height="867" /></a></p>
  <p>If you love some fruitiness in your food, then this recipe is for you…</p>

  <p>Turkey with cilantro lime <i>crema?</i> Yes please 👄…</p>
  <h2>Pin It! 11 Best Low-Carb Taco Recipes</h2>
  <p><img class="aligncenter size-full wp-image-3045" src="https://www.livingchirpy.com/wp-content/uploads/2016/10/11-Best-Low-Carb-Taco-Recipes.jpg" alt="11 Best Low Carb Taco Recipes" width="667" height="1000" /></p>
  <div class="rp4wp-related-posts rp4wp-related-post">
  	<h3>Related Posts</h3>	</div>


created_at: 2018-01-15 13:49:42
updated_at: 2018-01-15 13:49:42
mimetype: text/html
language: fr-FR
domain_name: www.medecinedusportconseils.com
http_status: 200
title:
  combien de calories pendant une course, comment gérer l'alimentation avant pendant et après la course

url:
  https://www.medecinedusportconseils.com/2018/01/15/combien-de-calories-pendant-une-course-comment-gerer-lalimentation-avant-pendant-et-apres-la-course/

content:
  <h1><strong>Réflexion sur la dépense énergétique du cycliste et les adaptations nutritionnelles</strong></h1>
  <p>La dépense énergétique d’une course se situe entre 3000 et 5000 Kcalories ; en fonction de la durée et de l’intensité de l’effort</p>
  <p>Les carburants sollicités pour fournir l’énergie nécessaire : les <strong>glucides</strong> (40 à 55%), les <strong>lipides</strong> (40 à 60%), les <strong>protides</strong> (3 à 10%) ; cette répartition varie en fonction de la durée de l’effort, de l’intensité, de la puissance développée, du profil +/- vallonné de la course ; un contre la montre (effort court et intense) « tape » plus dans les glucides ; une étape de transition où ça ne roule pas tape beaucoup plus dans les lipides ; une étape de montagne tape un peu plus dans les protides. Pendant la course il est IMPOSSIBLE de quantifier précisément la répartition et les quantités consommées de ces 3 « carburants » (glucides, lipides, protides) ; il existe des profils « glucidiques » et des profils lipidiques (« diesel ») ; seul un test d’effort sur ergocyclomètre pendant lequel on procède à l’analyse des gaz expirés permet d’évaluer la dépense énergétique en glucides et en lipides (on peut alors tracer une courbe des substrats énergétiques utilisés)</p>
  <h2><strong>Les glucides :</strong></h2>
  <p><strong>-P</strong>endant l’effort le glucose est brûlé au niveau du muscle pour fournir de l’énergie nécessaire à la contraction des fibres musculaires ; quelles sont les sources de glucose pendant l’effort ? :</p>
  <ul><li>Le glucose qu’on peut stocker avant l’effort grâce aux repas qui précèdent (nutrition de la veille à petit déjeuner à boisson d’attente) = ces glucides sont stockés sous forme de <strong><span style="text-decoration: underline;">glycogène</span> dans les muscles et dans le foie</strong> (déjà on peut noter qu’un sportif qui possède une grosse masse musculaire peut stocker plus de glycogène) ; pendant l’effort ce glycogène va libérer du glucose qui va être « brûlé » au niveau du muscle pour libérer l’énergie (ATP) nécessaire. Le glycogène musculaire s’épuise vite s’il n’est pas entretenu en apportant du sucre pendant l’effort, et ce dès le début de l’effort : « <em>pour moins taper </em><em>(en quantité et en vitesse) dans ses réserves de glucides il faut apporter des glucides pendant l’effort</em>»</li>
  <li>Du glucose qu’il faut <strong><span style="text-decoration: underline;">apporter régulièrement pendant l’effort</span></strong> et ce dès le début de l’effort.</li>
  <li>Dans un effort d’endurance prolongée, au fur et à mesure que le glycogène musculaire et hépatique est utilisé et s’épuise (avec donc risque d’hypoglycémie), le corps est heureusement capable de continuer à fabriquer un peu de glucose au niveau du foie, on appelle ça la « <strong><span style="text-decoration: underline;">néoglucogénèse</span></strong> hépatique » ; ce glucose peut être « fabriqué » :</li>
  <li>à partir des <span style="text-decoration: underline;">acides aminés</span> (qui viennent du sang ; et qui sont libérés en « cassant » des fibres musculaires) appelés acides aminés glucoformateurs (surtout l’alanine) ;</li>
  <li>également à partir de l’<span style="text-decoration: underline;">acide lactique</span>; (cycle de Cori)</li>
  <li>également à partir du <span style="text-decoration: underline;">glycérol</span> (qui est libéré par nos réserves sous cutanées de graisses = le « tissu adipeux »; ces graisses qui constituent le tissu adipeux sont les triglycérides) ;</li>
  <li>d’autres composants (<span style="text-decoration: underline;">pyruvate</span> par exemple) le foie est capable de refaire du glucose ;</li>
  </ul><p><strong><span style="text-decoration: underline;">MAIS</span></strong> ces différentes voies de la « néoglucogénèse » ne peuvent se dérouler <strong><span style="text-decoration: underline;">QUE SI</span></strong> pendant l’effort on continue à apporter du sucre par l’alimentation (boissons glucidiques, aliments sucrés)</p>
  <p><strong>En pratique, pour les apports glucidiques :</strong></p>
  <ul><li>Au MAXIMUM la nutrition avant la course peut apporter <strong>1000 à 1300</strong> Kcalories de réserves en glycogène ; il faut apporter environ 10 à 12g de glucides par kg pendant les 24 heures qui précèdent (jusqu’à 3 jours selon la durée de l’effort) ; un sportif de 70 kg apportera donc 700 à 840g = 3000 Kcalories sous forme de glucides.</li>
  <li>Pendant la course il faut apporter au maximum (l’ « usine » à brûler du glucose ne peut pas fonctionner plus vite … ») 1Kcal de sucre par minute = 240 Kcal/h ; du fait de la tolérance digestive un apport optimal de <strong>200 Kcal</strong> semble possible ; 160 étant vraiment le minimum en dessous duquel le risque d’hypoglycémie est probable. Chaque sportif se connaît, doit « écouter » ses sensations, pour arriver à bien maîtriser les apports glucidiques dont il a besoin.</li>
  <li>Si la dépense énergétique pendant une course d’une durée de 5 heures est de 4500 Kcalories :
  <ul><li>1000 à 1300 Kcalories (selon le poids du sportif notamment selon sa masse musculaire) seront apportées par les réserves de glycogène</li>
  <li>2000 à 2500 (selon le niveau « aérobie » du coureur ; aussi selon l’intensité de la course) Kcalories seront apportées par les lipides.</li>
  <li>DONC il reste à apporter environ 4500-1200-2300 = 1000 Kcalories, <strong>cqfd</strong>!! car ça correspond aux 200 Kcalories de glucides par heure de course que j’ai évoquées plus haut dans ce document.</li>
  </ul></li>
  </ul><p><strong> </strong></p>
  <h2><strong>Les lipides </strong><strong>:</strong></h2>
  <p><strong> ils sont issus du tissu adipeux (= les triglycérides stockés sous la peau) Ces triglycérides sont dégradés en acides gras et en glycérol</strong><strong>.</strong> Les acides gras sont ensuite transportés dans la circulation sanguine par l’albumine jusqu’aux cellules musculaires pour permettre la production d’énergie au niveau des mitochondries. Le glycérol pouvant pour sa part être utilisé pour fabriquer du glucose (« néoglucogénèse ») Les réserves corporelles en lipides sont inépuisables ; il n’est donc pas utile de consommer des rillettes et du beurre pendant l’effort (d’autant que la présence de graisses ralentit fortement la vidange de l’estomac)</p>

  <h2>Les protides:</h2>
  <p>Pour l’apport en <strong>protides</strong> le corps va « taper » dans ses propres réserves (acides aminés issus des muscles, et aussi acides aminés qui circulent dans le sang) ; les « BCAA » (acides aminés branchés) sont les principaux sollicités. D’où l’intérêt éventuel d’apporter des « BCAA » avant, pendant puis après l’effort ; cet apport ne se conçoit qu’après étude précise du dossier nutritionnel, du niveau du sportif, de la durée de la course ; des complémentations consommées à outrance, sans maîtrise, représentent une attitude que je n’encourage pas.</p>

  <p><strong>Ce qu’il faut bien comprendre :</strong> pendant l’effort le mélange de combustibles (glucose, acides gras, acides aminés) se modifie avec la durée de l’effort. Pour une même intensité plus l’effort se prolonge et plus le muscle dégrade les réserves à distance : <strong>le glycogène du foie</strong> et surtout les acides gras du tissu adipeux. Plus le sportif est entraîné avec un gros potentiel « foncier » (aérobie) plus il économise son glycogène et plus il est capable d’utiliser les acides gras. Donc pour disposer de suffisamment de carburant pendant un effort prolongé il faut :</p>
  <ul><li>1/ Bien sûr s’alimenter avant (= faire des stocks de glycogène pour le foie et les muscles) et pendant l’effort (= apporter 200 Kcalories par heure, en moyenne)</li>
  <li>2/ Mais AUSSI être bien entraîné !!!</li>
  </ul>
  <h2><strong>L’ « opération portes ouvertes » :</strong></h2>
  <p>pendant les 90 minutes qui suivent la fin d’un effort prolongé pendant lequel un sportif a bien « tapé dedans » il faut VITE restaurer les stocks de carburant : tout ce qui va être consommé pendant la collation ou le repas va « refaire les stocks » : <strong>glucides</strong> (boissons sucrées, aliments glucidiques), <strong>aliments protéinés</strong> ; sans oublier les <strong>minéraux</strong>. Et bien sûr la <strong>réhydratation</strong>. A cette réflexion s’ajoute celle de privilégier des aliments « alcalins ».</p>

  <h2><strong>Ma réflexion personnelle :</strong></h2>
  <h3>Tous les chiffres que j’ai évoqués (consommation des différents carburants, dépense calorique, etc.) ne sont <strong>QUE</strong> des estimations ;  il n’est <strong>ABSOLUMENT</strong> pas possible de quantifier au gramme près et encore moins à la calorie près ce qui doit être consommé avant, pendant l’effort ; et après l’effort ; on ne dispose pas encore d’un « compteur » précis de calories dépensées, et surtout pas de moyens pour déterminer précisément la répartition (glucides, lipides, acides aminés) du carburant utilisé pendant l’effort. <strong>DONC je ne valide pas l’intérêt de mettre en place une stratégie qui consiste à proposer des menus avec des calculs précis de calories, en pesant les aliments</strong> ; sauf à « rassurer » le sportif et … son nutritionniste. Il est intéressant d’avoir des repères, des ordres d’idées (catégories d’aliments, quantités approximatives, environ 200 Kcalories pendant l’effort, puis comprendre l’intérêt de l’ « opération portes ouvertes » après l’effort) Mais vraiment sans plus. Mon expérience et surtout celle des nombreux sportifs que j’ai coachés et que je coache pour leur nutrition me fait affirmer que l’essentiel ce sont les sensations, l’ « instinct » ; devant un buffet à l’hôtel un sportif qui se connaît bien et qui a de bonnes bases sur la nutrition sait parfaitement construire son repas, sentir s’il a besoin de saler plus, s’il a besoin de pâtes plutôt que de riz, si son corps lui « demande » des légumes verts cuits, un potage ; s’il a besoin de prendre un dessert ; il écoute aussi sa sensation de faim, sa sensation de réplétion. Un navigateur que j’ai conseillé pour sa nutrition m’a expliqué que pendant son Tour du Monde, même si chaque jour il dispose d’un sac qui regroupe les aliments qui ont été préparés, il fait bien plus confiance à SES sensations : il termine ou non son sac, complète ou modifie éventuellement avec d’autres aliments à disposition. On peut fournir des idées de menus, avec des quantités approximatives (petite assiette, moyenne assiette, grande assiette), mais à mon sens SEUL le sportif connaît son corps et apprend à connaître et ressentir ce qui lui convient. L’enfermer dans des calculs de calories et peser les aliments c’est l’entretenir dans un carcan qui peut aboutir à une souffrance, une frustration, une perte d’autonomie de fonctionnement. Tout comme le calcul des watts et toute la technologie qui vient polluer l’écoute des sensations. Ces technologies, tout comme le savoir du nutritionniste, ce sont des outils complémentaires, qui ne doivent pas éloigner le sportif de sa quête principale, qui à mon sens est de se connaître, de fonctionner au « feeling ». Dans le milieu du sport où dans les équipes le staff est bien plus nombreux que le nbre de sportifs (préparateurs, entraîneurs, nutritionnistes, « préparateurs » mentaux, kinés, ostéos, médecins, bidulothérapeutes divers) le danger est réel que le sportif perde son autonomie … Vaste réflexion… Chaque intervenant est présent pour apporter une compétence, un outil complémentaire, oui ; mais sans excès ni recherche de « pouvoir » ni d’ « existence » … Nous sommes là pour guider le sportif, en restant à notre place.</h3>

  <p>Merci aux fidèles internautes qui suivent mon site, bientôt 11 millions de visiteurs : merci pour la confiance !</p>
  <p>Bien à vous</p>
  <p>Jean-Jacques</p>
  <p><strong>—Mon webmaster gère également un </strong><strong><a href="https://www.seance-sophrologie.com/">site de séances de sophrologie</a></strong><strong> sur lequel j’enregistre moi-même des séances, à destination du sportif, mais aussi du non sportif ; pour découvrir cet outil qu’est la sophrologie ; une séance gratuite de sophrologie est proposée sur ce site ; de nombreux thèmes sont traités :</strong></p>
  <p><strong>-Pour le sportif : comment gérer le mauvais stress, comment bien se préparer pour une compétition, un objectif, comment gérer les périodes d’indisponibilité sur blessure, comment mieux récupérer après l’effort, conseils et séances pour mieux dormir pour bien récupérer, comment optimiser la concentration et les réflexes, comment gérer le décalage horaire, etc. etc.</strong></p>
  <p><strong>-Pour le non sportif : comment lutter contre la migraine, l’énurésie, la colopathie fonctionnelle, comment apaiser le stress, comment mieux préparer un concours ou un examen, comment surmonter les épisodes de fatigue, comment mieux dormir, etc. etc.</strong></p>
  <p><strong>Une participation modique est demandée pour télécharger les séances, pour couvrir les frais de fonctionnement du site.</strong></p>
  									&#13;


title: La voiture tue… – Lisa Car
url: http://lisacar.eu/2018/01/12/la-voiture-tue/
created_at: 2018-01-15 15:49:27
updated_at: 2018-01-15 15:49:27
mimetype: text/html
language: fr-BE
domain_name: lisacar.eu
http_status: 200
content:
  <p><iframe src="https://www.youtube.com/embed/GW4DrmjxaXk?autoplay=1" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen">﻿</iframe></p>
  <p class="p1"><b>La publicité pour les automobiles est omniprésente dans nos sociétés. Les constructeurs y font leur propagande, en occultant avec grand soin les dangers que leurs produits représentent pour l’environnement, la santé et l’intégrité physique des personnes. Ils n’hésitent pas à mentir ou tricher quand il s’agit de les minimiser, comme le dieselgate en a apporté la triste preuve. Ce faisant, les constructeurs créent un imaginaire qui participe grandement et très efficacement à faire perdurer la culture de l’automobile dans nos sociétés. Et la grand-messe du secteur en Belgique, le Salon annuel, est l’occasion de mettre les bouchées doubles. Il ouvre ses portes au public ce vendredi 12. </b></p>
  <p class="p1">Comme le souligne très justement Pierre Lannoy, sociologue à l’ULB : « <i>Il n’y a pas 5,7 millions de voitures en Belgique, mais 100 ou 1.000 fois plus : des murs des villes jusqu’à nos salons, elles sont partout </i>» [1]. Cette omniprésence des voitures dans notre quotidien contribue à rendre difficile (pour ne pas dire impossible) la mise en place d’un système de mobilité réellement durable. Surexploitation de ressources non renouvelables, émissions de gaz à effet de serre, émissions sonores (plus de 200 décès par an en Belgique), pollution de l’air (plus de 2.300 décès par an), tués et blessés sur les routes (730 tués et 4.200 blessés graves par an), accaparement de l’espace public, amplification du « mitage » du territoire, production de déchets toxiques, … en raison des nombreuses incidences négatives des transports l’OCDE les considérait déjà non durables en 1996 – et précisait qu’ils s’écartaient de plus en plus de la durabilité, sous l’effet de dynamiques négatives.</p>
  <p class="p1">L’une de ces dynamiques – déjà dénoncée en 1991 par la conférence européenne des Ministres des Transports (CEMT) est l’augmentation du poids (ou de la masse), de la puissance et de la vitesse de pointe des voitures. Ajoutons l’augmentation, depuis une quinzaine d’années, du nombre de véhicules dont la face avant, inspirée de celle des « 4X4 », est de plus en plus agressive, et le tableau sera complet. Comme l’ont montré plusieurs études (http://journals.openedition.org/cybergeo/18862), les constructeurs automobiles promeuvent, via leurs omniprésentes publicités, les véhicules les plus représentatifs de cette évolution…</p>
  <p class="p1">Leurs publicitaires font appel à toutes les disciplines artistiques, à la psychologie et la sociologie ainsi qu’aux neuro-sciences pour accroître la force de leur persuasion. Ils n’hésitent pas à surfer sur sexisme, ethnocentrisme, culte de l’apparence, compétition, pulsions primaires et agressives etc. pour nous faire croire qu’acheter une voiture est synonyme de bonheur intense. En témoigne cette affirmation des organisateurs du salon de l’auto pour lesquels celui-ci constitue « <i>un immense événement populaire où tous, petits comme grands, trouveront à coup sûr de quoi combler leur bonheur</i> » [2].</p>
  <p class="p1">C’est parce qu’ils en ont les moyens que les constructeurs peuvent s’offrir des campagnes publicitaires et événements promotionnels de très grande ampleur. Les promoteurs de mobilité durable ne disposent pas de ressources équivalentes et ce n’est donc pas le meilleur, mais le plus riche qui gagne. Le plus riche qui, en l’occurrence, veille à construire de toute pièce et à entretenir soigneusement une culture dans les rets de laquelle l’ensemble de la société est enfermée. Comble du cynisme : les constructeurs automobiles pointent la responsabilité des consommateurs, accusés de réclamer des véhicules toujours plus éloignés des besoins réels de mobilité et limitent leur propre rôle à celui de fournisseurs de produits manufacturés de qualité attentifs à satisfaire leur clientèle.</p>
  <blockquote>
  <p class="p1">« <i>C’est choquant, mais chaque jour, aux E-U, 90 personnes dont 7 enfants sont tuées par balle sans que personne n’en parle (…) C’est comme avec la circulation, je crois. Si un enfant se fait renverser par une voiture et meurt, personne ne va dire qu’il faut éradiquer le trafic routier. Que le problème c’est la circulation. Cette dernière est indissociable de la vie en Occident. Aux E-U c’est pareil avec les armes </i>».<br />
  – Gary Younge, auteur de American Death Trip. </p>
  </blockquote>
  <p class="p1"><b><i>La voiture tue.</i></b> C’est le slogan retenu par des activistes lors de leur action de sensibilisation tenue à la veille de l’ouverture au grand public du salon. Vu le bilan annuel du secteur en termes de décès (accidents de la route, pollution de l’air et bruit) et de blessés graves, cette mention devrait être obligatoire sur les publicités pour les voitures individuelles… à défaut d’interdire ces publicités, mesure que nous prônons depuis 10 ans maintenant. Et pour contrer les dérives d’un système automobile d’autant plus agressif qu’il prend conscience de son anachronisme, un cadre réglementaire strict devrait être mis en place et imposé aux constructeurs afin de limiter certaines caractéristiques des voitures : masse, puissance, vitesse de pointe, agressivité de la face avant.</p>
  <p class="p2">Les partenaires du projet LISA Car (light and safe car : voiture légère et sûre) en ont esquissé les grandes lignes et travaillent à leur diffusion. (<a href="http://www.iewonline.be/La-voiture-de-demain-Le-dossier-qui-interpelle-l-ethique-des-constructeurs">http://www.iewonline.be/La-voiture-de-demain-Le-dossier-qui-interpelle-l-ethique-des-constructeurs</a> ou <a href="http://www.lisacar.eu">http://www.lisacar.eu</a>). Le salon est pour eux l’occasion d’inviter les constructeurs à s’inscrire dans une évolution du secteur centrée sur la protection de l’intégrité physique des personnes, de la santé et de l’environnement. Leur survie en dépend…</p>
  <hr /><p class="p1">[1] Propos tenus lors du colloque LISA Car qui s’est dérolé à Bruxelles le 10 novembre 2017 : <a href="http://www.lisacar.eu">www.lisacar.eu</a></p>
  <p class="p1"> [2] FEBIAC, <i>96e Brussels Motor Show – Le Salon universel</i>, 5 décembre 2017</p>


title: How I review code
url: https://engineering.tumblr.com/post/170040992289/how-i-review-code
created_at: 2018-01-24 08:43:05
updated_at: 2018-01-24 08:43:05
mimetype: text/html
domain_name: engineering.tumblr.com
preview_picture: https://assets.tumblr.com/images/og/fb_landscape_share.png
http_status: 200
content:
  Tumblr Engineering — How I review code&#13;
  &#13;
          <div class="app-nag">
              
              <p>&#13;
                  &#13;
                  <a class="app-nag-large-button app-nag-app-store-link button blue">Sounds perfect</a>&#13;
                  <a class="app-nag-large-button app-nag-app-store-deny">Wahhhh, I don’t wanna</a>&#13;
              </p>
          </div>&#13;
  &#13;
          
              
                  
              
              
              
              
              
              <div class="container">
                      <div class="main">
                          
                                  <div class="post-wrapper clearfix">
                                          <div class="post-content">
                                                  
                                                  
                                                  
                                                      <div class="reblog-list">
                                                          
                                                              <div class="post-reblog-trail-item original-reblog-content">
                                                                  <div class="post-reblog-header">
                                                                      <div class="post-avatar">
                                                                          <div class="post-avatar-wrapper">
                                                                              
                                                                              <a class="post-avatar-link" href="http://cyle.tumblr.com/post/170039642535" target="_blank">&#13;
                                                                                  <img class="post-avatar-image" src="https://78.media.tumblr.com/avatar_41ec475b6261_64.pnj" alt="image" /></a>
                                                                              
                                                                              
                                                                          </div>
                                                                      </div>
                                                                      
                                                                          <a target="_blank" class="post-tumblelog-name" href="http://cyle.tumblr.com/post/170039642535">cyle</a>
                                                                      
                                                                      
                                                                  </div>
                                                                  <div class="post-reblog-content">
                                                                      <div class="post-body">
                                                                          <p>Reviewing code is one of the most important parts of an engineer’s job at Tumblr, even more so than writing code. Our codebases are shared by hundreds of engineers, so it’s critical to make sure we’re not just writing the best code we can, but <a href="https://engineering.tumblr.com/post/156934724082/how-i-code-now">that the code being written can be understood by others</a>. Taking the time to review someone else’s code is the most critical opportunity to ensure all of that is happening.</p><p>At Tumblr, every code change happens in <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fhelp.github.com%2Farticles%2Fabout-pull-requests%2F&amp;t=NWEwZDczOTAyZDVjZTI1N2FjNWU4N2UzOTgzZWUzOTJjNjQyNWJjZix2aThROVVsdA%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F170040992289%2Fhow-i-review-code&amp;m=0">a Pull Request on an internal Github instance</a>. We have repositories for the PHP backend, our database schemas, our iOS (Swift/Obj-C) and Android (Java/Kotlin) mobile apps, infrastructure projects written in Go, C/C++, Lua, Ruby, Perl, and many other projects written in Scala, Node.js, Python, and more. All of our code repositories rely on authors to write Pull Requests and get approvals from their peers before merging their changes to the master branch and deploying to production where real people interact with it.</p><p>How I personally review code has changed considerably over my few years at Tumblr. Before working at Tumblr, I wrote code mostly by myself and reviewed code with a very small set of people. Shifting to a huge codebase with hundreds of contributors was a big change. Thankfully I’ve had some good teachers. I went from reviewing maybe one pull request a month to currently reviewing an average of 25 pull requests a week. Here are some of the principles that help me keep my reviews timely and helpful.</p><p>The first thing I ask myself after a review has been requested of me is <i>who wrote this?</i> Are they a junior or senior engineer? Are they new to this codebase or a seasoned veteran? Have I ever reviewed their code before? Am I familiar with the project this code change contributes to?</p><p>When I’m reviewing the code of someone I work with closely, I probably know pretty well what their thinking was when they wrote it, and I have an idea of what experiences they’ve been through. Junior engineers sometimes need a little more hand-holding, which usually means giving them more help with code examples and references. Senior engineers sometimes need to be reminded that highly performant, abstract, or clever code is often difficult to read and understand later, which usually means asking them for more inline comments and documentation.</p><p>It’s also fundamentally important to review the code as if <i>anyone</i> could read the review you’re about to submit, not just the author. There are two main reasons for this. First, some people learn by reading the reviews that other engineers write; as a more junior engineer that’s exactly how I found out the most about the intricacies of Tumblr’s codebase. Also, in six months’ time it’s very likely you may be looking at this code again to figure out how it works. Having a helpful code review of it around can give some insight into the decisions that went into <i>why</i> it works the way it does.</p><p>The core of my review, no matter who is writing the code change, centers around being able to understand the code itself and the motivations and context around it. To me, ideally anyone should be able to pop into a pull request and expect enough context to understand the code change and why it was done the way it was done and how it works the way it works. This is especially important in an old, shared codebase, where someone three years from now may be looking at your PR to figure out why you chose to do what you did. If that’s not included, or if there aren’t at least links out to the relevant context, something is wrong. More detail is always better.</p><p>I don’t worry as much about code style or syntax itself, as we have automated processes to ensure that new or changed code conforms to our agreed-upon coding standards. Similarly to what I wrote about in <a href="https://engineering.tumblr.com/post/156934724082/how-i-code-now"><i>how I code now</i></a>, I look for code that is well-documented (both inline and externally), and code that is clear rather than clever. I’d rather read ten lines of verbose-but-understandable code than someone’s ninja-tastic one-liner that involves four nested ternaries. Especially if the person writing the code has been around the block a few times and been burned themselves by old, undocumented, clever code.</p><p>Once I feel like I can understand the code change, I try to put myself in the shoes of someone who doesn’t deal with this area of the codebase very often (which may be the case for me at the time!) and think of how to review the code to help make it clear for <i>them</i>. I try to think of someone new being hired six months from now, looking at this code, wondering how it works.</p><p>Sometimes not everything can get done in one pull request. At Tumblr we try to keep our PRs small so they can be reviewed quickly and safely, rather than bundling a ton of hard-to-review work into a 5,000-line-change PR. Because of this, sometimes the work has to be broken up into chunks, with PRs that build a foundation and lead to future PRs with finished implementations.</p><p>Or, alternatively, it’s common for evergreen codepaths to have known issues or work that’s been ticketed for future sprints, so it’s become a good, common practice to leave a <code>@todo</code> in the code with the name of the ticket where that todo will get done. That way we can unblock code changes from having to be totally complete within one pull request.</p><p>The number one thing that helps me review code in a timely manner, and stay on top of updates about PRs, is email. I check every Github email I get; I make sure that <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fhelp.github.com%2Farticles%2Fchoosing-the-types-of-notifications-you-receive%2F&amp;t=MmI2MGVmNjUzMDI0MmFkM2E4ZWVkMmZlZWIxNmZkZDFhZjUwYjMyMSx2aThROVVsdA%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F170040992289%2Fhow-i-review-code&amp;m=0">I don’t get notified for everything that happens in the repo</a>, but I do get every email that happens relating to a PR I’m associated with. This helps me stay on top of every step in the review process, because it’s almost always a back-and-forth that ideally shouldn’t last more than a day.</p><p>At Tumblr, most of our reviewers are selected by automated round-robin assignment when the PR author is ready to receive reviews. That assignment triggers an email and subscribes me to everything that happens relating to that PR. From there, it’s on me to stay on top of my email and make sure that I not only allocate time to do the review as soon as possible, but follow up on the PR if I leave a review and the author updates it in response to my review.</p><p>The most important advice for reviewing code (and, in other ways, writing code) is to remember <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fmtlynch.io%2Fhuman-code-reviews-1%2F&amp;t=MzJjN2RlY2Y4NjE2ODY1OWQyOTkzYWQ3NjAyNDEyZmFmNmJmMWZlZSx2aThROVVsdA%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F170040992289%2Fhow-i-review-code&amp;m=0">to be a human</a>. Remember that the person who wrote the code you’re reviewing is also a human. Give them the benefit of the doubt. Be nice when you write a suggestion, or have a question, or find an edge case that they don’t seem to have covered. Even if they’re a seasoned veteran coder who has written bulletproof performant code for years, treat them like a person who makes mistakes sometimes. Even if they’re someone you work with every day and you feel comfortable cracking jokes at their expense, understand that a new person might <i>not</i> understand.</p><p>Remember that shared, living codebases are often hectic and strange, especially ones that have been around for a decade. Remember that sometimes things are in a rush, so you can only do the best you can. We can’t halt everything in the name of perfect code, but we should make sure that everyone is doing the best they can, whether we’re writing or reviewing code.</p>
                                                                      </div>
                                                                  </div>
                                                              </div>
                                                          
                                                      </div>
                                                  
                                              </div>
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              </div>
                                  
                                      <div class="related-posts">
                                      
                                              <div class="post-wrapper clearfix">
                                                      
                                                      <div class="photo-wrapper">
                                                                  <div class="photo-wrapper-inner">
                                                                      <a href="https://engineering.tumblr.com/image/41819887564"><img src="https://78.media.tumblr.com/d6aec739ebb69adda5df038c26ae190a/tumblr_mhb3ney5DN1rh6s88o1_1280.png" alt="0xa:&#10;“ We have Engineering Summer Internships @ Tumblr! We’re looking for aspiring software engineers with a passion for open source software to join us for a summer of programming and fun. You will be integrated into a small engineering team working..." width="687" height="495" /></a>
                                                                  </div>
                                                              </div>&#13;
                                                              &#13;
                                                              &#13;
                                                              <div class="reblog-list">
                                                                  
                                                                      <div class="post-reblog-trail-item original-reblog-content">
                                                                          <div class="post-reblog-header">
                                                                                                                                                      
                                                                          <div class="post-avatar">
                                                                              <div class="post-avatar-wrapper">
                                                                                  
                                                                                  <a class="post-avatar-link" href="http://0xa.tumblr.com/post/41647980830" target="_blank">&#13;
                                                                                      <img class="post-avatar-image" src="https://78.media.tumblr.com/avatar_8f5f61f5c9e7_64.pnj" alt="image" /></a>
                                                                                  
                                                                                  
                                                                              </div>
                                                                          </div>
                                                                      
                                                                      
                                                                          <a target="_blank" class="post-tumblelog-name" href="http://0xa.tumblr.com/post/41647980830">0xa</a>
                                                                      
                                                                      
                                                                          </div>
                                                                          <div class="post-reblog-content">
                                                                              <div class="post-body">
                                                                                  <p>We have <a href="https://t.umblr.com/redirect?z=http%3A%2F%2Ftumblr.theresumator.com%2Fapply%2FyxseWO%2FEngineering-Summer-Intern.html%3Fsource%3DTumblr%2BEngineering%2BBlog&amp;t=NDIzMWRiMjUyN2VlZTk5MDg0ODZiNzkzNzgyMjM4MzMzYjFkMzMwOCxhVkdHdWhSYw%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F41819887564%2F0xa-we-have-engineering-summer-internships&amp;m=0">Engineering Summer Internships @ Tumblr</a>!  We’re looking for aspiring software engineers with a passion for open source software to join us for a summer of programming and fun.  You will be integrated into a small engineering team working on a real-world project as part of</p>
  <ul><li>Product Engineering: Using PHP and JavaScript, create new and improve site features that keep our growing millions of users doing amazing things with their tumblelogs.</li>
  <li>Search Engineering: Research, expand and refine Tumblr’s search infrastructure and search features.</li>
  <li>Platform Engineering: Write highly optimized distributed services that manage data and requests in real time, helping our site scale to billions of posts.</li>
  <li>Infrastructure Engineering: Work hands on with the Network team configuring, deploying and maintaining JunOS network devices.</li>
  <li>Mobile Engineering: Come work on the application that’s putting Tumblr in millions of users’ pockets.  A passion for IOS and Android is needed.</li>
  </ul><p>Polish your code samples, then send us your resume via our <a href="https://t.umblr.com/redirect?z=http%3A%2F%2Ftumblr.theresumator.com%2Fapply%2FyxseWO%2FEngineering-Summer-Intern.html%3Fsource%3DTumblr%2BEngineering%2BBlog&amp;t=NDIzMWRiMjUyN2VlZTk5MDg0ODZiNzkzNzgyMjM4MzMzYjFkMzMwOCxhVkdHdWhSYw%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F41819887564%2F0xa-we-have-engineering-summer-internships&amp;m=0">Engineering Summer Internship</a> job page.</p>
  <p><br />(We’re also hiring full time Engineers at every level of our technical stack.  Learn more on <a href="https://www.tumblr.com/jobs">Tumblr’s Jobs page</a>).</p>
                                                                              </div>
                                                                          </div>
                                                                      </div>
                                                                  
                                                              </div>&#13;
                                                              &#13;
                                                          </div>
                                              <div class="post-wrapper clearfix">
                                                      
                                                      &#13;
                                                              &#13;
                                                                  <p>This summer the engineering team at Tumblr got to work with some amazing Interns.  We asked each of them to share their experiences and tell you a little bit about the projects they worked on.  Here is the first in a series of upcoming intern profiles.</p><p>–</p><p><a href="http://iainnash.tumblr.com" title="iainnash.tumblr.com" target="_blank">Tumblr Summer Intern:  Iain Nash</a></p><p>This summer I interned at Tumblr as a front end web engineer working with the discovery team. I had amazing opportunities here to build awesome things that many people see, but more important, to work with a creative and dynamic team, and be able to contribute to Tumblr. Additionally, I loved spending the summer in New York - really is an exciting place to be.</p><p>I started off getting setup with my own development box and similar access to full time employees at Tumblr. While I started off with smaller projects to get to know the codebase and team, I quickly started getting bigger and bigger projects. It was really overwhelming at first to deploy the tumblr.com codebase within the first week I was here, going from only writing tiny things to a site as big as Tumblr.</p><p>The first big project I worked on was making a new logged out tag page. Throughout the summer, I was mostly mentored by <a href="http://errthng.tumblr.com" title="errthng.tumblr.com" target="_blank">Johnny Benson</a>, who really helped me out with how things are done and constant creative and practical decisions involving my work. I also worked with <a href="http://sexpigeon.tumblr.com" title="sexpigeon.tumblr.com" target="_blank">Tag Savage</a> for many of the design changes I was working on. It was always fun for me to hear “if this isn’t too hard to do…,” and be able to make a proof-of-concept by the day’s end. In fact, the current tag page design started off as refinements to a current tag page, then grew into a bigger project when I took these suggestions on. The layout of this page is rather unique - smart sliding rows, and it took a good deal of code to make it work properly.</p><p>I also had the opportunity to clean up and improve on some of the already stunning login and register views. These pages were mostly complete, just needing some design and code tweaks. It was a bit nerve wracking deploying these pages as there was a chance I could have missed something and would break login. Most of the changes I made were on the backend PHP, so that going out without a hitch was great for me.</p><p>I really enjoyed the other interns at tumblr this summer - previously, I would be the only intern at a company, now I had other interns working with me. Going to lunch, exploring the city was always fun with the other interns.</p><p>Now, it is time for me to head back to school at the University of Southern California, and face the homework, the time crunches, and the assignments once again. Seeing Tumblr grow and change over the past few months was a cool experience, and I’m glad I was able to be a part of it.</p><p>– <a href="http://iainnash.tumblr.com" title="iainnash.tumblr.com">Iain</a></p>&#13;
                                                                  </div>
                                              <div class="post-wrapper clearfix">
                                                      
                                                      <div class="photo-wrapper">
                                                                  <div class="photo-wrapper-inner">
                                                                      <a href="https://engineering.tumblr.com/image/59025107455"><img src="https://78.media.tumblr.com/21f90f3a85646974be81efe93013acdb/tumblr_mrsm11Onjo1qjk2rvo2_r1_1280.jpg" alt="Tumblr Summer Intern: Jared Stern&#10;Working at Tumblr as a summer engineering intern, I was flung headfirst into a mysterious world replete with terms I did not understand, people I did not know, and a codebase that defied all attempts at..." width="1280" height="1194" /></a>
                                                                  </div>
                                                              </div>&#13;
                                                              &#13;
                                                                  <p class="p1"><a href="http://jaredestern.tumblr.com" title="jaredestern.tumblr.com" target="_blank">Tumblr Summer Intern:  Jared Stern</a></p><p class="p1">Working at Tumblr as a summer engineering intern, I was flung headfirst into a mysterious world replete with terms I did not understand, people I did not know, and a codebase that defied all attempts at understanding. I asked many questions, and slowly realized that with a little thinking I could figure some things out myself. Slowly, I got to know the tools and languages (now I know some PHP!) and gained a bit of confidence in dealing with our code.</p><p>Much of my work dealt with a couple of Tumblr’s back-end services, which handle a lot of the heavy lifting for the web application—mostly moving data around so the app can quickly access everything it needs. I was given quite a bit of responsibility, which was exciting and instructive and frightening, particularly when I broke an important thing on my third Tuesday. Luckily, my other work was a bit less eventful. </p><p class="p1">I eventually got more comfortable (a bit more comfortable, anyway!) with deploying changes to our code. In addition to services, I worked on a few small projects closer to the site’s front end. I fixed a bug in the bookmarklet that caused posts to be created incorrectly. I fixed an issue in our internal administration site so the site would be more responsive at peak times. On one occasion, I worked with a member of our support team to fix a single tumblelog that curiously would not load past its thirteenth page. It was a pleasure to be able to fix an actual user’s actual problem.</p><p>Through all of this I had the honor of working with the fabulous Tumblr team, people who were friendly and helpful and knowledgeable, and who went out of their way to help me along. All told, it was a marvelously challenging, interesting, and educational summer.</p><p class="p1"><a href="http://jaredestern.tumblr.com" title="jaredestern.tumblr.com" target="_blank">- Jared</a></p>&#13;
                                                                  </div>
                                              <div class="post-wrapper clearfix">
                                                      
                                                      <div class="post-content with-caption with-thumbnail">
                                                              
                                                              
                                                                  <div class="caption">
                                                                      <blockquote class="link_og_blockquote"><p>John Bunting talks about different services Tumblr has built and how their architecture helps them be fault tolerant as they continue to grow.<br /></p></blockquote><p>John Bunting talks about different services Tumblr has built and how their architecture helps them be fault tolerant as they continue to grow.</p><p>You are looking at a Tumblr post, so you love GIFs. You are reading an engineering post, so you love bits. Have you ever wanted to know how Tumblr turns these bits into GIFs? Thanks to <a href="https://t.umblr.com/redirect?z=http%3A%2F%2Fwww.infoq.com%2F&amp;t=ODAwMzhlNzJhNDE1YjRkMmJkMTc2MGMzMDNjNDg1Nzg1MjlmYjcwZCx3VkZGU3NvNQ%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F109401621999%2Ftumblr-bits-to-gifs&amp;m=0">QCon</a>, you can watch cyborg hacker <a href="http://tmblr.co/mAmgsbBR1y8VRT9y71VUc6Q">codingjester</a> talk about how its done.</p>
                                                                  </div>
                                                              
                                                              
                                                          </div>
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          </div>
                                              <div class="post-wrapper clearfix">
                                                      
                                                      <div class="post-content">
                                                              
                                                              
                                                                  <div class="body-text"><p><b>Why dynamically resize images in the first place?</b><br /></p><p>Before the dawn of on-demand resizing at Tumblr, every posted image was resized into seven or eight different sizes, and each was saved into our backing media store (a massive S3 bucket). This made serving our images very fast—just grab the size you want right from the bucket! While this was great, it also meant that any changes to our image processing would not affect any images we had already saved (billions of images). If we were to upgrade image quality, add a new size crop, or change how we handle taking down media, the effect would only be marginal…<i>what a bummer!</i> The cost of storing all the resizes as separate files (petabytes of data!), along with a lack of agility moving forward, motivated us to adopt a dynamic resizing and serving strategy.</p><p>We began with resizing jpg and png images on-demand instead of persisting each different resize crop in our S3 bucket. This has been a great success; our “Dynamic Image Resizer” churns through over 6,000 images a second, at a roundtrip request latency of only 250ms per image. Not having to store the resizes saves us tens of thousands of dollars a month! So, the natural question was, <i>can we also do this for gifs and make a “Dynamic Gif Resizer?”</i></p><p><b>The problem with resizing gifs on-demand</b></p><p>Gifs, as a medium, are a wonderful thing. They capture a special or hilarious moment and repeat it back to you, forever. However, the actual <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FGIF&amp;t=OTBjNDhkYmExNTFiY2M5Y2UzNDQyNzNjN2QyNzkwYzVlMGUxOWVhZSxiSVd0Qkw3Mg%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F133544314394%2Fresizing-gifs-on-demand&amp;m=0">Graphics Interchange Format</a> leaves much to be desired. Last touched in 1989, the format is woefully outdated, and this begets massive, low quality animated images. When compared to video format counterparts (H.264 and the like), the gif file size can be tens of times larger at similar visual quality. Many companies have punted on the gif file format entirely; imgur released their <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fimgur.com%2Fblog%2F2014%2F10%2F09%2Fintroducing-gifv%2F&amp;t=ZGJjODQyNWMzNjU3MDI1NTAzYmNlMzZhMDA1ODM3N2Q0Njk3MjI0MyxiSVd0Qkw3Mg%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F133544314394%2Fresizing-gifs-on-demand&amp;m=0">gifv format</a>, which wraps an mp4 video. Instagram will loop your video clips, but will flatten gifs to a still image. However, as the true “home of the gif,” Tumblr isn’t ever giving up on your gif files!</p><p><b>Resize it faster</b></p><p>A while ago, one of my colleagues <a href="http://tmblr.co/mnX9D46oEX0BnJGoDav1HpQ">@dngrm</a> posted about updates we made in our <a href="http://engineering.tumblr.com/post/80003435120/who-doesnt-love-animated-gifs-believe-it-or">gif resizing technology</a>. Essentially, we switched our gif resizing library from <a href="https://t.umblr.com/redirect?z=http%3A%2F%2Fwww.imagemagick.org%2F&amp;t=MWE4M2RlMTBiZTU0NGRiNzNlNmM3MTRiOWIwYmVkZjVkZDViNDJhNSxiSVd0Qkw3Mg%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F133544314394%2Fresizing-gifs-on-demand&amp;m=0">ImageMagick</a> to <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fgithub.com%2Fkohler%2Fgifsicle&amp;t=NjE3OTk4NmU2ODAyNjc1NTgzOWEwNzU1NzE0N2MxN2U2ZmZmMWZhOSxiSVd0Qkw3Mg%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F133544314394%2Fresizing-gifs-on-demand&amp;m=0">gifsicle</a> with great success—we got lower latency and higher-quality results. In order to resize a gif in a realistic timeframe for on-demand resizing and serving, we <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fgithub.com%2Fkohler%2Fgifsicle%2Fpull%2F47&amp;t=MTM0ZThjMzRlYjRmNDVlYTI1OGE4ZTA4OGE0NjE2ZjBkNDZkZWJlNCxiSVd0Qkw3Mg%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F133544314394%2Fresizing-gifs-on-demand&amp;m=0">proposed some changes</a> to gifsicle that parallelizes the resizing step. Since a gif is just a stack of image frames, we figured that resizing them using a thread pool could lead to a performance improvement. Luckily for us (and the world!), gifsicle author Eddie Kohler accepted and merged our changes into gifsicle. With this new threaded resize option in gifsicle, we gained about a 1.5-2x speed-up in resizing an average gif against using the vanilla gifsicle. This brought down the average wall time of a gif resize to about 100ms. The entire gif resize request (downloading the upstream image, resizing the gif, and serving the response) is now only 400ms on average.</p><p><b>Cache is king</b></p><p>To make all this possible, tumblr heavily relies on <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FContent_delivery_network&amp;t=NTJmMmFkMmE5ODllOWU0MjBiY2U3MDJiODBkOTQwNTA1MmQ4YTFmYSxiSVd0Qkw3Mg%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F133544314394%2Fresizing-gifs-on-demand&amp;m=0">CDNs</a> to cache massive amounts of static content and avoid repeated work. Thanks to this, the Dynamic Gif Resizer only gets a little over 1,000 resize requests per second, thanks to an incredibly-high cache hit ratio on our CDNs.</p><p>On top of that, we rely on the usage of conditional GET requests and 304 Not Modified responses to cut down on the amount of real work we must do in the resizing level. The number of 304s we serve fluctuates between 30-50% for all gif responses, which saves us a tremendous amount of compute time!</p><p><b>Putting it all together</b></p><p>The resizer itself is an nginx server with a custom module that does the upstreaming and resizing, and is written in C. The jpg/png resizer utilizes <a href="https://t.umblr.com/redirect?z=http%3A%2F%2Fopencv.org%2F&amp;t=OTFjNzRmNzRlNWJiNTZmZDEwNmJhNTg3YmUzNGRmMzZkZDFhZDVlNyxiSVd0Qkw3Mg%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F133544314394%2Fresizing-gifs-on-demand&amp;m=0">OpenCV</a> for image manipulation, while the gif resizer uses the aforementioned gifsicle library.<br />Our fleet of resizers and their surrounding architecture are housed in AWS. The main motivation for this was colocation to our image store (S3) and the ability to automatically scale our instance count up and down, depending on time of day (our traffic pattern is heavily cyclic over a 24h window). The rest of tumblr’s architecture is housed in our own DC. Below is a minimalistic diagram of our resizer setup.</p><img src="https://78.media.tumblr.com/9ebc8b1a6da0a360bb9a87bc96efc288/tumblr_inline_ny2u82u4Az1shti1c_1280.png" alt="image" width="700" height="678" /><p><b>Thanks</b></p><p>Both the Image Resizer and Gif Resizer were massive undertakings, and a lot of people deserve credit for fantastic work:<br />Massive thanks to co-developer <a href="http://tmblr.co/mQi8FAOnlawQ6_hZ8a23koA">@naklin</a>, and to <a href="http://tmblr.co/me9UAhxyVlnVC-g1g993D9A">@neerajrajgure</a> who helped with improvements.<br />To <a href="http://tmblr.co/mnX9D46oEX0BnJGoDav1HpQ">@dngrm</a>, <a href="http://tmblr.co/mCmH53l5aaftrXfVRoAta5Q">@michaelbenedict</a>, <a href="http://tmblr.co/m2kWeuYiN6mUDTT9_3vCoFg">@heinstrom</a>, <a href="http://tmblr.co/m8U7S7nWdBNx2Xp90XkPldQ">@yl3w</a>, and <a href="http://tmblr.co/mmo8lUtH7YLF5sR1vQCnwSg">@jeffreyweston</a> for architecture help and sage advice.<br />To our AWS enterprise support team Frank Cincotta, Shaun Qualheim, Darrell DeCosta, and Dheeraj Achra.<br />And to Eddie Kohler who helped clean up my ugly gifsicle changes and let them be a part of his library.</p><p><b>Questions? Comments?</b></p><p>Talk to me on tumblr using our new messaging system! My tumblr is @hashtag-content<br /></p><img src="https://78.media.tumblr.com/06671339829af601dc96e7847a723330/tumblr_n4tkieg2CT1s2wio8o1_500.gif" alt="image" width="500" height="382" /><p class="tmblr-attribution"><a href="https://tmblr.co/Zul0Mt1EVKs1d" target="_blank">Originally posted by gameraboy</a></p></div>
                                                              
                                                              
                                                          </div>
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          </div>
                                              <div class="post-wrapper clearfix">
                                                      
                                                      <div class="post-content">
                                                              
                                                              
                                                                  <div class="body-text"><p>At Tumblr, we’re always looking for new ways to improve the performance of the site. This means things like adding caching to heavily used codepaths, testing out new CDN configurations, or upgrading underlying software.<br /></p><p>Recently, in a cross-team effort, we upgraded our full web server fleet from PHP 5 to PHP 7. The whole upgrade was a fun project with some very cool results, so we wanted to share it with you.</p><p>It all started as a hackday project in the fall of 2015. <a href="https://tmblr.co/mBWgO3jg4lxBdIkQDX2pSSg">@oli</a> and <a href="https://tmblr.co/m2kWeuYiN6mUDTT9_3vCoFg">@trav</a> got Tumblr running on one of the PHP 7 release candidates. At this point in time, quite a few PHP extensions did not have support for version 7 yet, but there were unofficial forks floating around with (very) experimental support. Nevertheless, it actually ran!</p><p>This spring, things were starting to get more stable and we decided it was time to start looking in to upgrading more closely. One of the first things we did was package the new version up so that installation would be easy and consistent. In parallel, we ported our in-house PHP extensions to the new version so everything would be ready and available from the get-go.</p><p>A small script was written that would upgrade (or downgrade) a developer’s server. Then, during the late spring and the summer, tests were run (more on this below), PHP package builds iterated on and performance measured and evaluated. As things stabilized we started roping in more developers to do their day-to-day work on PHP 7-enabled machines.</p><p>Finally, in the end of August we felt confident in our testing and rolled PHP 7 out to a small percentage of our production servers. Two weeks later, after incrementally ramping up, every server responding to user requests was updated!</p><p>When doing upgrades like this it’s of course very important to test everything to make sure that the code behaves in the same way, and we had a couple of approaches to this.</p><p><a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fgithub.com%2Fetsy%2Fphan&amp;t=NTQ1NWM3ZDQ0NTBlOTAxMTE0NmMxMjRkNTBhMjAzMzViZTUzNjI2NCxHTWc0TExPNQ%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F152998126990%2Fphp-7-at-tumblr&amp;m=0">Phan</a>. In this project, we used it to find code in our codebase that would be incompatible with PHP 7. It made it very easy to find the low-hanging fruit and fix those issues.</p><p>We also have a suite of unit and integration tests that helped a lot in identifying what wasn’t working the way it used to. And since normal development continued alongside this project, we needed to make sure no new code was added that wasn’t PHP 7-proof, so we set up our CI tasks to run all tests on both PHP 5 and PHP 7.</p><p>So at the end of this rollout, what were the final results? Well, two things stand out as big improvements for us; performance and language features.</p><p>When we rolled PHP 7 out to the first batch of servers we obviously kept a very close eye at the various graphs we have to make sure things are running smoothly. As we mentioned above, we were looking for performance improvements, but the real-world result was striking. Almost immediately saw the latency drop by half, and the CPU load on the servers decrease at least 50%, often more. Not only were our servers serving pages twice as fast, they were doing it using half the amount of CPU resources.</p><img src="https://78.media.tumblr.com/f22a1f1583d60d8ffca7d6682a0b2132/tumblr_inline_og2suygoIo1qzyw0r_1280.png" alt="image" width="700" height="660" /><img src="https://78.media.tumblr.com/92f12c9adf869b7ce109701d7b8d8327/tumblr_inline_og2sv6UnmF1qzyw0r_1280.png" alt="image" width="700" height="686" /><p>These are graphs from one of the servers that handle our API. As you can see, the latency dropped to less than half, and the load average at peak is now lower than it’s previous lowest point!</p><p>PHP 7 also brings a lot of fun new features that can make the life of the developers at Tumblr a bit easier. Some highlights are:</p><ul><li>Scalar type hints: PHP has historically been fairly poor for type safety, PHP 7 introduces scalar type hints which ensures values passed around conform to specific types (string, bool, int, float, etc).</li><li>Return type declarations: Now, with PHP 7, functions can have explicit return types that the language will enforce. This reduces the need for some boilerplate code and manually checking the return values from functions.</li><li>Anonymous classes: Much like anonymous functions (closures), anonymous classes are constructed at runtime and can simulate a class, conforming to interfaces and even extending other classes. These are great for utility objects like logging classes and useful in unit tests.</li><li>Various security &amp; performance enhancements across the board.</li></ul><p>PHP 7 is pretty rad!</p></div>
                                                              
                                                              
                                                          </div>
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          </div>
                                              <div class="post-wrapper clearfix">
                                                      
                                                      <div class="post-content">
                                                              
                                                              
                                                                  <div class="body-text"><p>We’ve open-sourced a couple of Android utilities that we use in the Tumblr app for Android. Check it out:</p><p>A UI widget that allows for headers and footers on lists backed by <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fdeveloper.android.com%2Freference%2Fandroid%2Fsupport%2Fv7%2Fwidget%2FRecyclerView.html&amp;t=N2VlZDQzZjc5ODk1YTc3MTYyYzM1ZTQ0NTVmMDY2MzU4ZjUxYTIxNixUTGhnRWRFeA%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F118948866574%2Fbookends-and-remember&amp;m=0">RecyclerView</a>.</p><p>As we were upgrading our app to migrate from ListView to RecyclerView, we found it kind of silly that RecyclerView doesn’t support headers by default. So we built a little wrapper that’ll do this for you.<br /></p><p>An in-memory data store backed by shared preferences.</p><p><a href="https://t.umblr.com/redirect?z=http%3A%2F%2Fdeveloper.android.com%2Freference%2Fandroid%2Fcontent%2FSharedPreferences.html&amp;t=NDA4OWU0YWUzNDFhMWIxYzY1MjJkMDkzZmU1YzdmOGU3NTQ2NjAzMSxUTGhnRWRFeA%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F118948866574%2Fbookends-and-remember&amp;m=0">SharedPreferences</a> are useful but since they’re backed by disk, they can have unpredictable performance characteristics – you’re not guaranteed to always be in memory, and in the case of write operations, you <b>have</b> to hit disk (possibly asynchronously) and remember what you wrote.</p><p>Remember takes care of that by putting a write-through cache in front of SharedPreferences. It also gives you a bunch of desirable consistency and concurrency characteristics – access can happen from any number of threads concurrently, and doing a write followed by a read will always return the value you just put. (Even if the value hasn’t been written to disk yet).</p><hr /><p>Both of these projects are open-sourced under the Apache license, and are available at our <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fgithub.com%2Ftumblr&amp;t=MDI1OTY5NjI5MTMxMTc3NzUyMWNlMWYyZWJhODA1MzVkNWNlM2IxNCxUTGhnRWRFeA%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F118948866574%2Fbookends-and-remember&amp;m=0">Github page</a>. Let us know what you think!<br /></p></div>
                                                              
                                                              
                                                          </div>
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          </div>
                                              <div class="post-wrapper clearfix">
                                                      
                                                      &#13;
                                                              &#13;
                                                                  <p><a href="http://dreamynomad.tumblr.com" title="http://dreamynomad.tumblr.com" target="_blank">Tumblr Summer Intern: Eric Leong</a></p><p>I spent this summer as an intern on Tumblr’s Android team. I joined as the team had just transitioned to Android Studio, so we were all learning how to work with the new IDE together while familiarizing myself with the code. On the first day I even made a pull request to ignore a folder created when installing Android Studio. My tasks throughout the summer were to implement features the team hadn’t gotten around to yet, allowing me to brush the dust off my Java and touch the various parts of the codebase at my own pace.</p><p>I mainly focused on user-facing feature development, which involved grappling with the intricacies of Android animations and the Tumblr app. My first task was to develop the notifications widget and revamp the existing post creation widgets, which turned out to be a great way to play with the Tumblr codebase and the newest features of the Android framework. I had full responsibility for the features I developed, with the design and QA team assigning bugs to me, which was both exciting and humbling. I had the most fun working on features I knew no one else had implemented, like “swipe back”, and realizing that I was pushing the boundaries of the Android platform.</p><p>It was an incredible experience to watch my code end up in the hands of our Android users and watch my friends play with the features I built. I’m also proud that I had a chance to fix issues and add functionality that I wanted to see in the app. Even when I did not directly work on a feature, my feedback helped shape the design and implementation.</p><p>I had an amazing summer working with the Tumblr team, who provided guidance amidst a flurry of questions and showed me how design and code can come together to produce a beautiful app. Me and my fellow interns were brought closer together by our love of photography and the Tumblr community. </p><p>It was an unforgettable summer at Tumblr where I played my small role in bringing creators the audience they deserve.</p><p><a href="http://dreamynomad.tumblr.com" title="http://dreamynomad.tumblr.com" target="_blank">- Eric</a></p>&#13;
                                                                  </div>
                                              <div class="post-wrapper clearfix">
                                                      
                                                      <div class="post-content">
                                                              
                                                              
                                                              
                                                                  <div class="reblog-list">
                                                                      
                                                                          <div class="post-reblog-trail-item original-reblog-content">
                                                                              <div class="post-reblog-header">
                                                                                                                                                          
                                                                          <div class="post-avatar">
                                                                              <div class="post-avatar-wrapper">
                                                                                  
                                                                                  <a class="post-avatar-link" href="http://robewaschuk.tumblr.com/post/48822960728" target="_blank">&#13;
                                                                                      <img class="post-avatar-image" src="https://78.media.tumblr.com/avatar_df004d672c27_64.pnj" alt="image" /></a>
                                                                                  
                                                                                  
                                                                              </div>
                                                                          </div>
                                                                      
                                                                      
                                                                          <a target="_blank" class="post-tumblelog-name" href="http://robewaschuk.tumblr.com/post/48822960728">robewaschuk</a>
                                                                      
                                                                      
                                                                                  
                                                                              </div>
                                                                              <div class="post-reblog-content">
                                                                                  <div class="post-body">
                                                                                      <p>I wrote some stuff while I was at Google about writing clean alerts and keeping an oncall rotation sane; after some cleanup they’ve allowed me to make it public.  Of course, this represents my opinions and not Google’s.  They do reflect what we think are best practices at Tumblr, though.  <a href="https://t.umblr.com/redirect?z=http%3A%2F%2Fwww.jobscore.com%2Fjobs2%2Ftumblr%2Fsite-reliability-engineer%2Fa2rv-gIcmr4QdkiGakhP3Q%3Fref%3Drss%26sid%3D68&amp;t=OGZjMDE3MTU0YjJjNWI2ZWY5Y2E0MTU0NDE4OTI2YTk5Y2IyZGE4NixKcUtoYXlSSw%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F48852408813%2Fmy-philosophy-on-alerting&amp;m=0">We're hiring Site Reliability Engineers.</a></p>
  <p>Check out <a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fdocs.google.com%2Fdocument%2Fd%2F199PqyG3UsyXlwieHaqbGiWVa8eMWi8zzAn0YfcApr8Q%2Fedit%23heading%3Dh.fs3knmjt7fjy&amp;t=NTg2NjdjY2ExOGFmYTQ0YjUyNWU1YjBlYjA4NTRhZDdiNGJlYjBhNyxKcUtoYXlSSw%3D%3D&amp;b=t%3ACwoihvyyOxn8Mk5TUS0KDg&amp;p=https%3A%2F%2Fengineering.tumblr.com%2Fpost%2F48852408813%2Fmy-philosophy-on-alerting&amp;m=0">My Philosophy On Alerting</a>.</p>
  <p><strong>Summary</strong></p>
  <p>When you are auditing or writing alerting rules, consider these things to keep your oncall rotation happier:</p>
  <ul><li>Pages should be urgent, important, actionable, and real.</li>
  <li>They should represent either ongoing or imminent problems with your service.</li>
  <li>Err on the side of removing noisy alerts.</li>
  <li>You should almost always be able to classify the problem into one of&#13;
  <ul><li>availability &amp; basic functionality</li>
  <li>latency</li>
  <li>correctness (completeness, freshness and durability of data)</li>
  <li>and feature-specific problems.</li>
  </ul></li>
  <li>Symptoms are a better way to capture more problems more comprehensively and robustly with less effort.</li>
  <li>The further up your serving stack you go, the more problems you catch in a single rule. Balance this with being able to distinguish what’s going on.</li>
  </ul></div>
                                                                              </div>
                                                                          </div>
                                                                      
                                                                  </div>
                                                              
                                                          </div>
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          </div>
                                              </div>
                                      <p>&#13;
                                          &#13;
                                          <a class="related-post-cta button bordered open-in-app">See this in the app</a>&#13;
                                          <a class="related-post-cta see-more button bordered" href="https://engineering.tumblr.com/">Show more</a>&#13;
                                      </p>
                                  </div> 
                       
                  </div> 
              <noscript><noscript><noscript id="bootloader"></noscript></noscript></noscript>


title: [Affaire Nanga Parbat] mise au point sur la polémique Elisabeth Revol
url: http://www.montagnes-magazine.com/actus-affaire-nanga-parbat-point-situation
created_at: 2018-02-10 09:53:49
updated_at: 2018-02-10 09:53:49
mimetype: text/html
domain_name: www.montagnes-magazine.com
preview_picture: http://www.montagnes-magazine.com/media/actu/2018/02_f%C3%A9vrier/nanga%20parbat.jpg
http_status: 200
content:
  <h2>Face à la polémique explosant sur les réseaux sociaux, il convient de faire un point de la situation sur l'« affaire » Nanga Parbat...</h2><p><a class="lightbox" href="http://www.montagnes-magazine.com/media/actu/2018/02_f%C3%A9vrier/nanga%20parbat.jpg" title="nanga parbat"><img src="http://www.montagnes-magazine.com/media/actu/2018/02_février/nanga%20parbat__fit_670x445.jpg" title="nanga parbat" alt="nanga parbat" width="670" height="445" /></a><br /></p><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3>Pour les néophytes : le fonctionnement des secours en montagne en France</h3><p>99,99 % des commentaires désobligeants, voire carrément haineux 
  (pourquoi ?), sont écrits par des personnes ne connaissant strictement 
  rien à la montagne et au monde du secours en général. Certains sont même
   persuadés qu'ils ont dû payer l'hélicoptère qui, un jour, les a évacués 
  vers un hôpital !</p><p> Rappelons qu'en France, le secours (tous types de 
  secours) est gratuit. Que l'on ait un accident de voiture mort bourré à 3
   grammes, que l'on se tranche le pied avec sa tondeuse ou que l'on ait 
  un soucis en pratiquant un sport quelconque, c'est la même chose. Le 
  secours est gratuit. Point.</p><p>Quel différence entre un footeux qui se 
  met en arrêt cardiaque le dimanche (le foot représente 30 % des 
  accidents sportifs) ou un alpiniste qui se casse une cheville en 
  montagne ? Aucune. <br /></p><p> Les deux ont pleinement choisi d'être là 
  simplement pour leur plaisir. Notre société vient les aider à se sortir 
  de ce mauvais pas. Ah, il faut un hélico en montagne ? Oui, tout comme 
  il faut un hélico si le  footeux est en état critique ou lors d'un gros 
  accident de la route. Ces fantastiques machines sont là, <i>elles sauvent 
  plus de vie qu'elle n'en prennent</i> comme disait Sikorsky et qu'elles 
  volent ou restent au sol, l'équipage touche exactement le même solde. Si 
  le quota d'heures de vol n'est pas réalisé, il faudra de toute façon 
  cramer le volume annuel de kérosène attribué à chaque base... <br /></p><p>Dans 
  le cas plus précis de la montagne, éventuellement, il peut être relevé 
  une clause de « secours abusif » (défini par les secouristes eux-mêmes, 
  gendarmes ou policiers) mais c'est extrêmement rare et et je ne crois 
  pas qu'un centime ait, à ce jour, été demandé à qui que ce soit (merci 
  pour les plus informés qui liront cet article de réagir, s'ils savent – 
  uniquement...). <br /></p><p> De toute façon, les secouristes préfèrent toujours
   récupérer quelqu'un « d'un peu » fatigué en le redescendant dans la 
  vallée que de le laisser se foutre tout seul dans une galère à la 
  descente pour finalement déclencher un secours en pleine nuit, toujours 
  plus risqué, ou pour aller, le lendemain, récupérer son corps au pied 
  d'une barre rocheuse...</p><h3> Pour les « montagnards » : pourquoi tant de haine ?<br /></h3><p>Reste le 00,01 % de « montagnards »... <br />Là ça devient nettement plus compliqué à expliquer...<br />Pourquoi tant de méchanceté totalement gratuite (comme les secours...) et de haine ?<br />Pure jalousie ? Mise en avant ? Grande gueule ? <br /></p><p>
   Pour certains, il s'agit de conflits 
  plus personnels avec des protagonistes dans cette - désormais - affaire 
  mais pour les autres, quel est l'intérêt de dézinguer 
  une des leurs, qu'ils ne connaissaient d'ailleurs même pas il y a une 
  semaine ?</p><h3> Qui est Élisabeth Revol ?</h3><p> Si d'un coup elle 
  se retrouve prise dans un gigantesque cyclone médiatique (comme il y en a
   rarement, voire comme il n'y en a jamais eu auparavant !), c'est bien malgré elle. <br /></p><p> Le 2.0 l'a sauvé, le 2.0 la lapide.</p><p>
   Depuis des années cette femme réalise des ascensions fantastiques en Himalaya 
  (entre autres le premier enchaînement de 3 x 8000...) tout en restant 
  dans l'anonymat le plus complet, et cela même dans les médias 
  spécialisés qui n'ont quasiment découvert son existence que tout 
  récemment...</p><p> On a donc affaire à une sportive hors-paire (le fait 
  qu'elle soit encore en vie le prouve), prof de gym à la base, qui n'est 
  pas une communicante comme elle pourrait l'être si elle était plus 
  habituée à se frotter aux journalistes. Ses proches ont géré comme ils 
  ont pu la monstrueuse pression. <br /></p><p> D'abord 24h/24 pour tenter 
  d'organiser un secours à 8 000 km de distance, puis 24h/24 en étant 
  littéralement poursuivis par les charognards de la « presse ».</p><p> Tout ça pour dire que les propos d'Élisabeth de ces derniers jours ne sont donc pas calculés. <br />Elle est sous le coup de l'incroyable épreuve qu'elle vient de vivre 
  (sûrement qu'une grosse partie d'elle est encore là-bas, sur les pentes 
  du Nanga Parbat) et, en état post-traumatique, elle parle donc avec son cœur, 
  avec ses tripes, sans réfléchir plus que cela aux plus mauvaises 
  interprétations qui en découleront. <br /></p><p> Son ami est mort, elle a tenté
   l'impossible pour le sauver (lui pesait 80 kg et elle 45...), elle ne 
  s'en sort que par miracle et elle risque de finir avec quelques bouts en
   moins.</p><p> Pour 99,99 % des gens qui 
  liront cet article (pour reprendre mon % fétiche), nous serions tous en train de dormir 
  de notre dernier sommeil au fond d'un trou de neige sur la voie 
  Kinshofer depuis une semaine à sa place... Elle a réussi l'impossible et même nos deux Polonais, 
  Adam et Denis, ont été surpris de la voir dans l'état ou elle était,
   redescendre sans trop de mal, les 1 200 mètres la face.</p><p> Profitons-en, au passage, pour rappeler qu'il s'agit d'alpinistes, volontaires, en
   train de grimper la montagne d'à côté, qui sont venus simplement et 
  humainement tendre la main à leur frère et sœur d'altitude. Cela aurait 
  tout aussi bien pu être Tomek et Élisabeth qui aillent leur porter 
  secours !</p><p> Certains pensent donc encore 
  qu'il s'agit de secouristes étatiques payés par on-ne-sait-qui...</p><p> En toute état de cause, aujourd'hui, et par manque de 
  quelques informations également, Élisabeth est persuadée d'avoir était 
  bernée et trahie par les autorités pakistanaises. <br /></p><h3> Les secours au Pakistan</h3><p> C'est simple il n'y en a pas au sens stricto sensu du terme. <br /></p><p>
   Au Pakistan, le tourisme n'en est qu'à ses balbutiements, le pays souffrant 
  toujours d'une sinistre réputation de par ses conflits à répétitions 
  depuis 70 ans avec l'Inde, puis du terrorisme. <br /></p><p> Notre milieu fut 
  particulièrement touché en 2013 lors de l'attaque du camp de base du 
  Nanga Parbat par des talibans qui firent, au final, 10 morts parmi les 
  équipes d'alpinistes présentes ce jour là...</p><p> Ici on n'est pas au 
  Népal, pour qui le tourisme est la manne financière principale des 
  contrées les plus reculées. Le secours là-bas, est en train de doucement
   se mettre en place, à base d'initiatives totalement privées et de 
  collaborations principalement européennes avec la Suisse, l'Italie, la 
  France et l'Allemagne. <br /></p><p>Des équipes de sherpas sont ainsi spécialement 
  formées aux manips de secours tandis que les pilotes font du réel 
  travail aérien (un bon entraînement !) pour la construction des 
  infrastructures du pays.</p><p> Au Pakistan, les seuls hélicos et 
  pilotes disponibles sont militaires et l'armée rentabilise ses machines 
  et équipages en confiant toutes les missions « commerciales » à l'une de 
  ses filiales :  Askari Aviation. <br /></p><p> Askari intervient donc en tant 
  qu'opérateur totalement privé qui ne fait qu'utiliser les moyens 
  militaires, à savoir, dans ce cas, des Écureuils B3 perçus en 2009. <br /></p><p>
   La mission première de ces machines est quand même d'apporter un 
  soutien aérien, en altitude, aux troupes dans le conflit larvé depuis 
  les années 50 avec l'Inde (1 000 à 2 000 morts dans le dernier 
  affrontement de 2001/2002 et 1 000 morts en 1999...). <br /></p><p>À côté de 
  cela, les machines décollent donc pour de simples prestations privées : 
  transport, vol touristique et... SAR (Search And Rescue).<br /></p><p>Les 
  secouristes « de terrain » proprement dit ne sont que des volontaires du 
  Club alpin pakistanais qui sont prêts à apporter, comme ils peuvent, 
  leur aide (ils étaient d'ailleurs en stand-by dans le cas du Nanga 
  Parbat).</p><h3> Le mensonge pakistanais</h3><p> Oui, les pakistanais se 
  sont nettement emballés sur leurs réelles capacités... Ils ont 
  simplement sorti la notice technique de leur B3 dont le plafond 
  d'utilisation est bien de 7 000 mètres, sauf que... dans la réalité, il 
  faut des conditions aérologiques parfaites pour arriver à une telle 
  altitude (donc pas le cas forcément en plein hiver et durant les 
  journées précises de ce secours). <br /></p><p> Il s'agit ensuite d'une altitude 
  de vol maximale, donnée « constructeur », sans avoir à réaliser les 
  manœuvres les plus risquées de pose ou de décollage. La preuve, c'est qu'ils
   ont déjà eu toutes les peines du monde à mettre au sol les sauveteurs 
  polonais à moins de 5 000 mètres d'altitude...</p><p> À titre de 
  comparaison également, les sociétés privées népalaises sont équipées de machines 
  rétrofitées en B3+ offrant un gain d'une centaine de chevaux, ce qui 
  n'est pas négligeable quand on évolue en limite de puissance.</p><p> Il y a même eu un gros quiproquo pendant le secours car l'un des pilotes a annoncé un temps avoir déposé les polonais à 6 400 mètres ! Il est rapidement revenu sur ses déclarations en 
  prétextant une erreur de lecture (!) de ses instruments de vol. Sauf que
   dans ce cas précis, cela voulait dire qu'il les avait déposés bien 
  au-delà du gros morceau de la voie, à savoir le couloir puis le mur 
  Kinshofer qu'Adam et Denis ont tout de même mis 8 heures à franchir ! 
  Sa déclaration erronée a vraiment donné une lueur d'espoir car, dans ce
   cas, la cordée aurait pu courir réellement dans les pentes de neige 
  jusqu'à Tomek, qui n'aurait été que 800 mètres d'eux... Faux espoirs.</p><p>
   De toute façon, vu les diagnostics médicaux établis à posteriori, ils 
  n'auraient trouvé qu'un Tomek sans vie, où, même très affaibli, 
  ils ne pouvaient strictement rien faire à deux.</p><h3> Élisabeth n'a pas abandonné Tomek par choix, mais sur consigne des secours pakistanais </h3><p>
   En se basant sur les dires (et le SMS) des secours pakistanais 
  (et donc leur extrapolation sur leurs réelles capacités), ce sont eux qui
   ont donné comme ultimatum à Élisabeth : « tu descends jusqu'à 6 000 m, 
  là on te récupère et on remonte chercher Tomek ». <br /></p><p>Dans ces conditions, elle a obtempéré, pensant que ce n'était que l'affaire de quelques heures et le SEUL moyen de sauver Tomek.</p><p>
   Dans la réalité : les hélicoptères ne dépasseront donc jamais les 5 000
   mètres et arriveront péniblement au pied de la face 2 jours plus 
  tard...<br /></p><p>Quoiqu'il en  soit, la situation de la cordée aurait de 
  toute façon mal tournée, car le docteur Fred Champly estime que Tomek, 
  vu son état, est mort entre 2 à 6 heures après qu'elle l'ai quitté. Dans
   tous les cas de figure, il n'aurait pas pu être sauvé. Élisabeth aurait
   donc accompagné son ami jusqu'à son dernier souffle (comme cela s'est 
  fait des dizaines de fois en Himalaya) et n'aurait eu alors d'autres 
  choix que de redescendre seule de la montagne.</p><p> Donc, en ce sens, oui ils ont menti : sur leurs capacités et sur le timing du secours.</p><p><b>ARTICLE RECOMMANDE :</b> <a href="http://www.montagnes-magazine.com/actus-nanga-parbat-historique-entre-exploit-bonheur-tragedie" title="" target="_blank"><b>Nanga Parbat historique : entre exploit, "bonheur" et tragédie</b></a></p><br /><h3> Les Pakistanais ont-ils fait « monter les enchères » ? Non.</h3><p> Comme déjà expliqué précédemment, Askari Aviation est un opérateur privé. <br /></p><p>
   1 / Les tarifs de leurs prestations sont mentionnés sur leur site 
  internet : 3 818 $/heure pour un B3 avec une altitude max de vol à 6 000
   m.</p><p> 2 / Les clauses sont aussi très claires : les hélicoptères ne 
  volent que par deux (pour des raisons évidentes de sécurité, si l'une des 
  machines doit être abandonnée en montagne sur problème technique, 
  l'équipage peut être ainsi récupéré).</p><p> 3 / Leurs prestations pour les
   opérations de secours sont aussi notifiées : s'inscrire au préalable 
  chez eux en faisant un dépôt de 15 000 $ (récupérable s'il n'y a pas 
  d'intervention – 300 $ de frais de dossier) + une garantie financière 
  de son assurance + une garantie de son ambassade.</p><p> Lors du 
  déclenchement du secours il a donc été demandé les 15 000 $ (12 000 €) 
  dans un premier temps, le montant normal du dépôt.</p><p> Dans un second 
  temps, un devis estimatif a été établi à 50 000 $ (correspond donc à une 
  huitaine d'heures d'intervention, à, obligatoirement, deux machines). <br /></p><p> 
  Dans ce type d'opération, on sait quand on commence mais jamais trop 
  quand cela finit, donc leur calcul n'est pas à remettre en question et, 
  au final, la facture est de l'ordre de 32.000 €. Tout cela n'est donc 
  pas « sorti du chapeau » comme beaucoup l'ont dit... <br /></p><p> Nous excusons 
  donc au passage Élisabeth et son entourage (qui avaient bien d'autres 
  préoccupations en tête) et qui ont eu immédiatement le sentiment d'être 
  devenus une bonne pompe à fric pour les Pakistanais. <br />Quant à 
  l'option que tout soit payé en cash, cela ne choque qu'à moitié car tout
   s'est déroulé un week-end, donc avec les banques fermées, et le 
  Pakistan étant un peu dans le collimateur des instances anti-terroristes
   internationales, il faut sûrement du temps pour faire transiter des 
  dizaines de milliers de $... <br /></p><p> Bref, il y a eu quelques 
  dysfonctionnements c'est sûr, et ce n'est pas pour rien que le 
  gouvernement pakistanais a demandé l'ouverture d'une enquête. Mais 
  peut-être que cela n'est qu'un mal pour un bien pour justement que ce 
  type de missions de secours soit mieux organisé à l'avenir.</p><p> 
  Profitons-en juste pour rappeler que lundi dernier, le PGHM de Chamonix a
   fêté les 60 ans de sa création, suite... aux cafouillages chamoniards 
  lors du secours de Vincendon et Henry...</p><p><b>ARTICLE RECOMMANDE : <a href="http://www.montagnes-magazine.com/actus-il-60-ans-creation-pghm-chamonix" title="" target="_blank">[Il y a] 60 ans, la création du PGHM de Chamonix</a></b><br /></p><h3><br /></h3><h3>La preuve du sommet</h3><p>
   L'autre grosse discussion actuelle concerne la preuve du sommet, c'est-à-dire, pour 
  les non-initiés, la preuve que Tomek et Élisabeth sont bien allés au 
  sommet. <br /></p><p> C'est maintenant le nouveau grand truc à la mode qui hante 
  la communauté grimpante tandis que pendant des décennies chacun a bien 
  raconté ce qu'il voulait... (et même les plus grands !).</p><p> Le 
  visionnage des images de l'ascension, hier soir dans Envoyé Spécial, a 
  montré Élisabeth juste à 100 ou 200 m sous le sommet, vers 17 h, au 
  coucher du soleil. Elle est en parfaite forme physique, même pas 
  essoufflée (enfin si, comme la plupart d'entre nous quand on a monté un 
  étage sans ascenseur...), et elle attend Tomek qui est une centaine de 
  mètres derrière elle. <br /></p><p> Elle annonce qu'ils seront au sommet de nuit. Dernières images.</p><p>
   Selon son récit, elle continue sa progression jusqu'à arriver sur la 
  crête sommitale à 18 h et se prend le vent remontant de la face Rakiot 
  (4 000 m de dénivelé quand même) en pleine figure.</p><p> Il fait nuit 
  noire et, visiblement, elle ne réalise pas d'images complémentaires sur 
  lesquelles nous n'aurions rien vu de toute façon. Quand Tomek finit très 
  péniblement par la rejoindre et lui annonce qu'il est aveugle, elle 
  comprend immédiatement que c'est une monstrueuse galère en prévision et
   prend la seule décision évidente de vite filer au plus vite vers le 
  bas. <br /></p><p> Sommet ou pas ? Contrairement à quelques uns de ses 
  « collègues » sous pression médiatico-sponsoro-financière, Élisabeth n'a 
  pas à traîner cela sur ses petites épaules. <br /></p><p> Et ses choix de
   « pousser le bouchon » au maximum certes, mais de toujours redescendre au bon 
  moment, montrent qu'elle a toujours été très claire et honnête dans ses 
  ascensions. <br /></p><p> Certains, dont il vaut mieux taire le nom ici, n'ont 
  jamais eu de problème avec l'enjolivage (voire le mensonge pur et simple)
   sur leurs sommets... Tous ces mêmes détracteurs qui 
  ragotent aujourd'hui ont même sûrement été les premiers à applaudir des 
  deux mains des chronos, qui, avec le recul, étaient totalement 
  irréalisables.</p><p> L'année dernière, pour prendre les deux derniers exemples concernant Élisabeth, elle s'arrête à l'antécime du Makalu, à 8 445 m, à 20 mètres (de dénivelé) du sommet et le dit. Il lui aurait été aussi très simple d'annoncer qu'elle était allée au sommet. Personne ne la voyait de toute façon.</p><p> De même, juste après, à l'Everest, en solo, elle atteint 8 400 m dans la tempête. Elle le dit. Personne sur la montagne ? Aussi ultra simple de croiter le sommet et de passer à autre chose.</p><p> Dans l'histoire de l'alpinisme, rappelons que certains se sont même faits une spécialité des ascensions par mauvais temps. Au moins, on n'a jamais trop su où ils étaient réellement allé...</p><p>
   Je finirais juste avec les mots que Catherine Destivelle a tenu à la 
  conférence de presse : « il est vraiment dommage que les grands médias ne
   parlent de la montagne qu'à travers les drames ».</p><p> Bon week-end à tous et faites gaffe, la montagne, ça vous gagne...<br /></p>


title: Arkéa. Une tribune de soutien signée par 121 personnalités bretonnes
created_at: 2018-02-10 09:57:00
updated_at: 2018-02-23 11:35:15
mimetype: text/html
language: fr
domain_name: www.letelegramme.fr
preview_picture: http://www.letelegramme.fr/images/2018/02/08/photo-d-illustration-claude-prigent_3812237.jpg
http_status: 200
url:
  http://www.letelegramme.fr/economie/arkea-une-tribune-de-soutien-signee-par-120-personnalites-bretonnes-08-02-2018-11844927.php

content:
  <div>
  		<div>
  			<img src="http://www.letelegramme.fr/img/letelegramme_logo.png" alt="image" /></div>
  	</div>
  	
  		
  	
  	
  		
  			
  		<p>Le Télégramme</p>
  																				<p>&#13;
  					<a href="http://www.letelegramme.fr/economie/arkea-une-tribune-de-soutien-signee-par-120-personnalites-bretonnes-08-02-2018-11844927.php#contentCommentaires">&#13;
  					    &#13;
  						5&#13;
  					    Voir <strong>les commentaires</strong>&#13;
  					</a>&#13;
  				</p>
  					<img width="1000" height="667" src="http://www.letelegramme.fr/images/2018/02/08/photo-d-illustration-claude-prigent_3812237.jpg" alt="(Photo d'illustration Claude Prigent)" />(Photo d'illustration Claude Prigent)<div id="MainArticle">
  												<h2 class="chapo">
  					121 personnalités bretonnes, notamment issues du monde politique, économique ou associatif, publient ce jeudi une tribune de soutien à Arkéa, demandant "le maintien de son indépendance". Ils se disent "inquiets" pour l'avenir du Crédit Mutuel Arkéa et pour les emplois qu'ils génèrent en Bretagne. Nous publions cette tribune dans son intégralité.
  				</h2>
  			
  							

  <div class="global_tribune">
  	<p>
  		<strong>Le maintien de l’indépendance d’Arkéa est vital pour la Bretagne et pour l’économie numérique française !</strong></p>
  	<p>
  		Nous, entrepreneurs, élus, associations et citoyens bretons faisons part de notre vive inquiétude concernant l’avenir du Crédit Mutuel Arkéa et des emplois qu’il génère en Bretagne et dans l’Ouest. Le CM11-CIC tente une véritable « OPA Hostile » sur les actifs de cette banque prospère et innovante. Nous soutenons Arkea dans son combat pour le maintien de son indépendance en quittant la marque Crédit Mutuel. Plus que celui d’une entreprise, ce combat est avant tout celui de la décentralisation et du maintien des centres de décision en région. Nous réclamons d’urgence de la Banque Centrale Européenne qu’elle reconnaisse Arkéa en tant que banque coopérative et mutualiste indépendante et demandons à l’Etat français d’appuyer cette demande.</p>
  	<p>
  		<strong>Des associations aux startups : un pilier du territoire breton et de l’économie numérique français </strong></p>
  	<p>
  		Le Crédit Mutuel de Bretagne a été depuis ses origines un des plus grands artisans de la réussite et de l’essor de la Bretagne. Avec les fédérations du Massif Central et du Sud-Ouest, Arkéa poursuit aujourd’hui ce travail. Héritière de toute la tradition mutualiste bretonne, la banque a contribué à l’essor de succès économiques connus de tous : du pâté Hénaff aux chantiers navals Piriou, de l’exceptionnelle aventure industrielle de Sermeta au soutien quotidien de la pêche et de l’agriculture bretonne. </p>
  	<p>
  		Grâce à la dynamique engagée par Ronan Le Moal, son Directeur général, le groupe est devenu un grand champion européen du digital. Il est le premier investisseur français du monde des « Fintech » (Fortuneo, Leetchi, Younited Credit, Pumpkin…) avec plus de 100M€ investis en direct ces dernières années. Dans le paiement, Arkéa est même un leader européen respecté: tous les paiements d’Amazon arrivent à Brest ! </p>
  	<p>
  		Pour nous, Arkéa va au-delà de son rôle d’entreprise : elle est au coeur de la vie de toutes les Bretonnes et de tous les Bretons: du club de football local au Festival des Vieilles Charrues, c’est toute une région qu’elle dynamise, qu’elle soutient.</p>
  	<p>
  		<strong>Une indépendance, 9.000 emplois et une région directement menacés </strong></p>
  	<p>
  		La tentative menée par le CM11-CIC de prise de contrôle d’Arkéa via la Confédération nationale du Crédit Mutuel est inacceptable. Au-delà des méthodes employées très critiquables, il nous apparaît étonnant que le CM11-CIC, concurrent sur la quasi totalité de ses métiers, puisse mettre la main d’une telle manière sur une entreprise régionale indépendante depuis toujours et ne partageant ensemble tout au plus qu’une marque.</p>
  	<p>
  		Si cette opération devait aboutir, les 2.000 emplois du siège et de ses filiales à Brest, à Rennes et à Nantes disparaitront à court ou moyen terme laissant exsangue une Bretagne et un Finistère déjà affaiblis. La suppression inévitable des emplois, agences et filiales redondants saignera un peu plus profondément notre région. Qui sera demain la banque qui investira massivement au capital de nos entreprises (plus d'un milliard d’euros investi ces dernières années par Arkéa) ? Et que dire des emplois indirects qui se comptent par milliers !</p>
  	<p>
  		<strong>Non à la centralisation ! </strong></p>
  	<p>
  		La décentralisation n’est pas qu’une histoire d’institutions et de transfert de compétences aux régions. C’est avant tout la présence de centres de décision au plus proche des gens. Dans le privé comme dans le public. Noyer Arkéa dans un grand ensemble piloté depuis Paris serait à cet égard un signal terrible, trois ans après l’épisode des Bonnets rouges. </p>
  	<p>
  		Dans cette tempête, nous soutiendrons Arkéa et ses trois dirigeants Jean-Pierre Denis, Ronan Le Moal et Anne Le Goff dans leur projet. Nous enjoignons toutes les Bretonnes et les Bretons, tous ceux qui saluent la vivacité du groupe, à se mobiliser et à souquer ferme ensemble.</p>
  	<p>
  		Retrouvez les témoignages des 121 signataires fondateurs de cette tribune en cliquant sur : <a href="http://avisdetempete.bzh/" target="_blank">www.avisdetempete.bzh</a></p>
  	<p>
  		Sauvons Arkea ! Rejoignez-nous !</p>
  	
  	<div class="signataires">
  		<strong>Signataires fondateurs : </strong>
  		
  		<p>
  			• Charles CABILLIC, Président West Web Valley<br />• François CUILLANDRE, Président de Brest métropole<br />• Franck BELLION, président de la CCI 29<br />• Alban BOYE, Directeur Général Trecobat<br />• Christian GUILLEMOT, Co-fondateur Ubisoft<br />• Jean-David CHAMBOREDON, Président ISAI<br />• Joseph LE MER, Président SERMETA<br />• Jean-Charles LARSONNEUR, Député Assemblée nationale<br />• Gilles FALC'HUN, Président SILL<br />• Michel GOURITEN, Président SOFICO<br />• Jean-Marc Roué, Président de Brittany Ferries<br />• Ludovic JOLIVET, Maire de Quimper<br />• Stéphane BIDAMANT, President UE 29 Medef Finistere<br />• Jacques JOLIVET, Président H2J<br />• Frédéric MAZZELLA, Président-Fondateur BlaBlaCar<br />• Marc LE FUR, Vice-président Assemblée nationale<br />• Jean-Guy LE FLOCH, Président ARMOR-LUX<br />• Olivier MATHIOT, PDG PriceMinister Rakuten<br />• Edouard COUDURIER, Pdg Le Télégramme<br />• Pierre KOSCIUSKO-MORIZET, Fondateur Kernel<br />• David NOBLECOURT, CEO SHOP APPLICATION<br />• Olivier BORDAIS, PDG Sas SODILECK<br />• Marie EKELAND, Cofondatrice de Daphni et France Digitale<br />• Jocelyn DENIS, PDG Digitaleo<br />• Michel JESTIN, Président Asso MJ pour l'enfance<br />• Patrick LE LAY, President NOMINOE SAS<br />• Pierre KARLESKIND, Vice-Président Région Bretagne<br />• Dominique CICCONE, Directeur Général Triskalia<br />• Jean-Jacques HÉNAFF, Président d'honneur du conseil de surveillance Jean Hénaff SA<br />• Pierre ROLLAND, President Les recycleurs bretons<br />• Mikaël RIVOALLON , Gerant Trace &amp; associes<br />• Marcel TREGUER, President Trecobat<br />• Arnaud HENRY, Président Phycee cosmetiques<br />• Marie-Laure FEILLANT, Directrice La Chocolaterie<br />• Christian LEMAIRE , Dirigeant BTCI<br />• Jean-Yves SALIOU, Président SAS LRK DIS<br />• Jean Luc MARTIN, Président Association Les Vieilles Charrues<br />• Pierre THUBERT, Dirigeant associé SCP THUBERT<br />• Nicolas LE BARS, Dirigeant CORSER<br />• Sébastien DE LAFOND, Président MeilleursAgents.com<br />• Arnaud GIRAUDON , Président Compte nickel<br />• Jean-Eudes QUEFFELEC, John Q Ventures<br />• Florent DE KERSAUSON, President Nestadio Capital<br />• Christian GESTIN , Gérant Scp Gestin Le Gall Nicolas Notaires<br />• Ronan PICARD, Président VALMATHI SAS<br />• Mikael MAUGUEN, Direction Groupe simon pneus<br />• Louis-Paul LAGADEC, President Carrieres Lagadec<br />• Nicolas CONRAUX , PDG La Butte<br />• Charles KERMAREC, Président du conseil d’administration Librairie &amp; Editions Dialogues<br />• Sébastien LE GOASCOZ, Directeur Général Izimmo<br />• Mathieu BARRAINE, Président Barraine Immobilier<br />• Brigitte AVELINE, Avocat Siam Conseil<br />• Ronan LOISON, Directeur Général Coopérative Les Salines de Guérande<br />• Patrick STEMPFEL, President Sas Kermad<br />• Dominique MAGUER , Directeur général Pen Allen développement<br />• Ronan CARADEC, Président SOCIÉTÉ MADEC<br />• Hervé STÉPHANUS, <br />• Olivier BARRAINE , Président Barraine promotion<br />• Jacques GONIDEC, PDG Conserverie Gonidec<br />• Jean yves KERMAREC , Gerant Histoire de chocolat<br />• Marc MENASÉ, Entrepreneur<br />• Dominique ANDRO, Ex Directeur général délégué Crédit Mutuel Arkéa<br />• Jean-Christophe CAGNARD, Président Groupe Asten<br />• Germain BERTHEVAS , Gerant Agrifimat<br />• Fabrice DROUILLARD, Président SOFAGEM<br />• Yves-Marie DERRIEN, Directeur Sandorgel<br />• Jean-François LEGAULT, Dirigeant CADIOU<br />• Sébastien LE CORFEC, Co-fondateur West Web Valley / ZIP<br />• Edouard DUMORTIER, CEO AlloVoisins<br />• Tristan MONTIER, Praticien hospitalier Université de Bretagne Occidentale / CHRU de Brest<br />• Alexandre GALLOU, Président Club Erispoë<br />• Alain LE ROCH<br />• Thierry MERRET, President FDSEA du Finistere<br />• Jacques COLIN<br />• Olivier MARC, President Advalo<br />• Claude FEREC, Professeur de Génétique, Chef de service hospitalier UBO/Inserm/CHU<br />• Maxime LAIZE, Dirigeant Corser<br />• Corentin LE FUR, Consultant Groupe LR<br />• Mériadec LE MOUILLOUR, Directeur général SAS Aeroports Bretagne ouest<br />• Alain NICOLET, PDG Clinique Pen an Dalar<br />• Didier CHEMIN, Directeur Financier Groupe omnium<br />• Denis LE SAINT, Gérant de société le saint<br />• Dominique LECOMTE, Direction Océan Terre Biotechnologie<br />• Willy BRAUN, co-fondateur daphni<br />• Delphine VILLUENDAS, General Partner Korelya Capital<br />• Karine BEUZIT, DG-DAF BREMAT<br />• Nicolas COHEN, Président Etsy France<br />• Yannick LEBOURDONNEC, YLBconseil<br />• Nona BARAZER, Chargé de mission SODIMEDIA<br />• Sam JERUSALMY, Partner<br />• Beatrice COCHARD, Directrice Voltstage<br />• Claire HOURY, Partner Ventech<br />• Patrick BELLEC, Président FP Invest<br />• Cécile NAY, Maire de Gouezec. Conseillere Départementale de BRIEC<br />• Pierre CORRE, Gérant CORRE FINANCE<br />• David GODEST , Ceo Dolmen<br />• Guillaume GIBAULT, Ceo Le slip français<br />• Jacques KUHN, Président du Directoire Société Financière Jacques Kuhn<br />• Dominique LE BORGNE, Gérant KEMPER GASTRONOMIE<br />• Nicolas REBOUD, Président Shine<br />• Lara ROUYRES, CEO Sélectionnist<br />• Rodolphe MENEGAUX, Partner Alven<br />• Quentin CAPELLE, Head of Events France Digitale<br />• Yann DARCY, Dirigeant R&amp;MP<br />• Yvan MOULLEC, Conseiller Départemental<br />• Rémi CRISTOFORETTI, Directeur Général LE GOUESSANT<br />• Rachel DELACOUR, VP Startups program Zendesk<br />• Frédéric LAMBERT, Dirigeant AAA LOCATOUR<br />• Didier VAUTHELIN, Gérant SARL Vauthelin Paysages<br />• Fabrice BOUDINET, Dirigeant SOFT<br />• Christine DURAND, Gerante Themisial<br />• Fleur PELLERIN , Présidente Korelya Capital<br />• Rémy UGUEN, Président SAITEL<br />• Jerome TREHOREL, Directeur Général Vieilles Charrues<br />• Jean-François CADIOU, Directeur Commercial AGENCE CENTRALE<br />• Marc PELLEAU, Président Sofipel<br />• Antoine BELLION, Président CJD BREST<br />• Maël DE CALAN, Conseiller départemental du Finistère<br />• Marie-Gabrielle DANIEL, Directrice Finance - Comptabilité Triskalia<br />• Laurence LE SCOEZEC, Responsable Trésorerie et Financements Triskalia<br />• Michel JAOUEN, Expert comptable et commissaire aux comptes OUEST CONSEILS BREST<br />• Armand GARREC, Directeur L'ASTROLABE<br />• Eric GUENAN, Dirigeant GCS<br />• Mikael ROCUET, Expert comptable OUEST CONSEILS<br />• Matthieu GALLOU, Président Université de Bretagne Occidentale<br />• Véronique BOURBIGOT, Conseillère départementale Conseil départemental du Finistère<br />• Didier GUILLON, Conseiller départemental Conseil départemental du Finistère<br />• Marie-José CUNIN, Conseillère Conseil départemental<br />• Jean François LE BLEIS, Conseiller départemental Conseil départemental<br />• Violaine LE GOFF, Dirigeante SAS VLG LE VIOBEN<br />• Jocelyne PLOUHINEC, Maire<br />• Cyril ZIMMERMANN, PDG AdUX<br />• Alain LE GRAND, Conseiller Départemental Fouesnant DEPARTEMENT DU FINISTÈRE<br />• Karim GHACHEM, Conseiller Régional Conseil Régional de Bretagne<br />• Aline CHEVAUCHER, Conseillère Départementale- Maire ELUE<br />• Raymond MESSAGER, Maire conseiller départemental, vice-président des maires ruraux<br />• Elisabeth GUILLERM, Conseillère Départementale<br />• Didier LE GAC, Député du Finistère Assemblée Nationale<br />• Eric Martineau-Fortin, Président White Star<br />• Marc COATANÉA, Élu local<br />• Jean-François MORVAN</p>
  	</div>
  </div>
  								</div>

  	
  						
  																																																																																													
  			
  	
                          

                      <div id="fixed-column">
                      
              
                                  
          
              
                  
                                  
                  
                                  
          
              

  <div class="encart encart_pluslu  encart_grey margin_top_40">
              <a class="a_title" href="http://www.letelegramme.fr/economie/arkea-une-tribune-de-soutien-signee-par-120-personnalites-bretonnes-08-02-2018-11844927.php#" title=""><b>Les plus</b> lus</a>
  					
              <ul class="liste_articles"><li>
  					<div class="article">
  						<a title="" class="lien_article" href="http://www.letelegramme.fr/economie/hausse-de-la-csg-la-colere-des-retraites-09-02-2018-11846252.php">
  												<img alt="Hausse de la CSG. La colère des retraités" src="http://www.letelegramme.fr/images/2018/02/09/photo-archives-francois-destoc_3813699_100x100.JPG" />Hausse de la CSG. La colère des retraités
  												Hausse de la CSG. La colère des retraités</a>
  						<p>
  							
  							<a class="nb_com" title="7 réactions" href="http://www.letelegramme.fr/economie/hausse-de-la-csg-la-colere-des-retraites-09-02-2018-11846252.php#contentCommentaires">7 commentaires</a>
  						</p>
  					</div>
  				</li>
  											<li>
  					<div class="article">
  						<a title="" class="lien_article" href="http://www.letelegramme.fr/economie/arkea-une-tribune-de-soutien-signee-par-120-personnalites-bretonnes-08-02-2018-11844927.php">
  												<img alt="Arkéa. Une tribune de soutien signée par 121 personnalités bretonnes" src="http://www.letelegramme.fr/images/2018/02/08/photo-d-illustration-claude-prigent_3812237_100x100.jpg" />Arkéa. Une tribune de soutien signée par 121 personnalités bretonnes
  												Arkéa. Une tribune de soutien signée par 121 personnalités bretonnes</a>
  						<p>
  							
  							<a class="nb_com" title="5 réactions" href="http://www.letelegramme.fr/economie/arkea-une-tribune-de-soutien-signee-par-120-personnalites-bretonnes-08-02-2018-11844927.php#contentCommentaires">5 commentaires</a>
  						</p>
  					</div>
  				</li>
  											<li>
  					<div class="article">
  						<a title="" class="lien_article" href="http://www.letelegramme.fr/economie/recyclage-le-ministere-demande-aux-industriels-de-s-engager-avant-la-fin-de-l-annee-09-02-2018-11846190.php">
  												<img alt="Recyclage. Le ministère demande aux industriels de s'engager avant la fin de..." src="http://www.letelegramme.fr/images/2018/02/09/brune-poirson-photo-afp_3813593_100x100.jpg" />Recyclage. Le ministère demande aux industriels de s'engager avant la fin de l'année
  												Recyclage. Le ministère demande aux industriels de s'engager avant la fin de l'année</a>
  						<p>
  							
  							<a class="nb_com" title="réaction" href="http://www.letelegramme.fr/economie/recyclage-le-ministere-demande-aux-industriels-de-s-engager-avant-la-fin-de-l-annee-09-02-2018-11846190.php#contentCommentaires"> commentaire</a>
  						</p>
  					</div>
  				</li>
  									</ul>
  	 
  </div>
                  
                                  
      
                                              

                                          

                  </div>
              <br class="brClearAll" />
                  
                                  
      
                              
                                      
              
                                  
          
              
                  
                                  
                  
                                  
          
              
                  
                                  
               
                                                      
  			<br class="brClearAll" /><div class="espace_lecteurs" id="contentCommentaires">
  				Vos <b>réactions</b>
  						<div class="reactions">
  							<div class="bg_reactions">
  								<div class="expend_zone_reactions">
  									<ul class="reactions_ul"><li class="reactions_li first">
  											<div class="reaction_avatar">
  												<img src="http://graph.facebook.com/100001122467529/picture" alt="image" />
  												
  													michel kerninon
  												
  												
  													09 Février 2018 à 19h32
  												
  											</div>
  											<div class="reaction_content">
  												<p class="reactions_txt">
  													Visiblement les femmes n'ont guère la parole dans cette affaire... Elles ne sont pas les seules. <br />Les syndicats de salariés et les clients-sociétaires-associés non plus. Il n'est pas trop tard. Sans doute. 
  												</p>
  											</div>
  											<br class="clear_all" /><ul class="actions_com gradient_blanc_gris"><li>
  													<a class="bt_com_signaler">Signaler un abus</a>
  												</li>
  												
  												
  											</ul></li>
  										<li class="reactions_li">
  											<div class="reaction_avatar">
  												<img src="http://graph.facebook.com/100001122467529/picture" alt="image" />
  												
  													michel kerninon
  												
  												
  													09 Février 2018 à 10h20
  												
  											</div>
  											<div class="reaction_content">
  												<p class="reactions_txt">
  													1°) Quel client a su vraiment été informé quand  " sa banque " mutualiste est passée de CMB à Arkéa ? <br />2° ) Combien de femmes figurent parmi les signataires de la pétition ci-dessus ?  <br />10 % de femmes et même pas d'ailleurs. ..  <br />On ne peut donc que s'interroger : <br />1°) Sur l'information inexistante délivrée aux clients-sociétaires quant au passage du CMB à Arkéa...  <br />2°) Sur la place des femmes dans la vie des affaires locales... 
  												</p>
  											</div>
  											<br class="clear_all" /><ul class="actions_com gradient_blanc_gris"><li>
  													<a class="bt_com_signaler">Signaler un abus</a>
  												</li>
  												
  												
  											</ul></li>
  										<li class="reactions_li">
  											<div class="reaction_avatar">
  												<img src="http://static.letelegramme.fr/avatar/photo-profil.jpg" alt="image" />
  												
  													Daniel Kérivel
  												
  												
  													09 Février 2018 à 06h51
  												
  											</div>
  											<div class="reaction_content">
  												<p class="reactions_txt">
  													Le CMB avait un nom simple, un logo associé, avec lesquels les gens de la région avaient des repères forts. le glissement vers Arkea, le nom associé, introduisent une perte de repères dans lequel les gens ne se reconnaissent pas car il a été fait sans leur accord ni concertation et introduit de la confusion  . L'argent, on ne plaisante pas avec , et les gens attendent d'une banque : stabilité, sérieux, et des signes symboliques simples et forts dans lesquels on peut avoir confiance . les changements de nom pour une banque peuvent faire perdre la confiance des clients. <br />où est passé le CMB ? 
  												</p>
  											</div>
  											<br class="clear_all" /><ul class="actions_com gradient_blanc_gris"><li>
  													<a class="bt_com_signaler">Signaler un abus</a>
  												</li>
  												
  												
  											</ul></li>
  										<li class="reactions_li">
  											<div class="reaction_avatar">
  												<img src="http://graph.facebook.com/100001122467529/picture" alt="image" />
  												
  													michel kerninon
  												
  												
  													08 Février 2018 à 19h50
  												
  											</div>
  											<div class="reaction_content">
  												<p class="reactions_txt">
  													Enfin régionale ou départementale... 
  												</p>
  											</div>
  											<br class="clear_all" /><ul class="actions_com gradient_blanc_gris"><li>
  													<a class="bt_com_signaler">Signaler un abus</a>
  												</li>
  												
  												
  											</ul></li>
  										<li class="reactions_li">
  											<div class="reaction_avatar">
  												<img src="http://graph.facebook.com/100001122467529/picture" alt="image" />
  												
  													michel kerninon
  												
  												
  													08 Février 2018 à 19h48
  												
  											</div>
  											<div class="reaction_content">
  												<p class="reactions_txt">
  													Ben voyons ! C'est la banque régionale... 
  												</p>
  											</div>
  											<br class="clear_all" /><ul class="actions_com gradient_blanc_gris"><li>
  													<a class="bt_com_signaler">Signaler un abus</a>
  												</li>
  												
  												
  											</ul></li>
  									</ul></div>
  							</div>
  							</div>
  	
  				
  				
  				<div class="envoyez" id="b_reagissez">
  					<div class="entete-reactions">
  						
  						<p>
  							Donnez <strong>votre avis</strong> et <strong>commentez</strong> cet article
  						</p>
  					</div>
  					
  					
  					
  					<br class="brClearAll" /></div>
  				<br class="brClearAll" /></div>
  			
  			
                                  
              
                                  
          
              
                  
                                  
      
                  
  <div class="article-a-la-une">
  	Articles <b>à la une</b>
  	<div class="articles">
  					<a class="article" href="http://www.letelegramme.fr/france/la-neige-s-eloigne-10-02-2018-11846369.php" target="_self">
  				<img class="lazy" height="142" width="230" alt="" src="http://www.letelegramme.fr/images/2018/02/10/la-neige-s-eloigne_3813805_230x142.jpg?v=1" />
  										La neige s'éloigne
  									</a>
  					<a class="article" href="http://www.letelegramme.fr/cinema/jusqu-a-la-garde-06-02-2018-11842259.php" target="_self">
  				<img class="lazy" height="142" width="230" alt="" src="http://www.letelegramme.fr/images/2018/02/06/jusqu-a-la-garde_3809406_230x142.jpg?v=1" />
  										Jusqu'à la garde ***
  									</a>
  					<a class="article" href="http://www.letelegramme.fr/economie/eolien-en-mer-a-quand-un-nouvel-elan-10-02-2018-11846357.php" target="_self">
  				<img class="lazy" height="142" width="230" alt="" src="http://www.letelegramme.fr/images/2018/02/10/eolien-en-mer-a-quand-un-nouvel-elan_3813800_230x142.jpg?v=1" />
  										Éolien en mer. À quand un nouvel élan ?
  									</a>
  					<a class="article" href="http://www.letelegramme.fr/finistere/telepherique-l-incroyable-scenario-10-02-2018-11846409.php" target="_self">
  				<img class="lazy" height="142" width="230" alt="La cabine du téléphérique de Brest avait chuté de quatre mètres lors de sa première opération d'entretien. L'exploitant Keolis avait confié cette première au constructeur qui avait missionné son sous-traitant. (Photo d'archives Stéphane Jézéquel)" src="http://www.letelegramme.fr/images/2018/02/10/la-cabine-du-telepherique-de-brest-avait-chute-de-quatre_3813836_230x142.jpg?v=1" />
  										Brest. Chute du téléphérique : l'incroyable scénario
  									</a>
  					<a class="article no-picture" href="http://www.letelegramme.fr/economie/especes-on-peut-en-retirer-chez-les-commercants-10-02-2018-11846359.php" target="_self">
  				
  										Espèces. On peut en retirer chez les commerçants
  														Il est désormais possible de retirer de l'argent en espèces chez les commerçants lors d'un paiement par carte bancaire. Il suffit de régler une somme supérieure au montant de l'achat et le commerçant...
  									</a>
  					<a class="article no-picture" href="http://www.letelegramme.fr/economie/verreries-de-brehat-le-fils-reprend-le-flambeau-10-02-2018-11846360.php" target="_self">
  				
  										Verreries de Bréhat. Le fils reprend le flambeau
  														Le fondateur des Verreries de Bréhat a transmis son « bébé » à son fils Stéphane Neumager. À côté de ses commandes pour l'hôtellerie de luxe, l'entreprise lancera en 2018 un site marchand à destination des particuliers. Dans l'artisanat d'art, elle n'a pas d'autre choix que de se développer.
  									</a>
  					<a class="article no-picture" href="http://www.letelegramme.fr/monde/maison-blanche-une-affaire-de-violences-conjugales-retentissante-10-02-2018-11846377.php" target="_self">
  				
  										Maison Blanche. Une affaire de violences conjugales retentissante
  														Le secrétaire général de la Maison Blanche, John Kelly, et la directrice de la communication de l'exécutif, Hope Hicks, sont pris dans la tourmente depuis la démission, mercredi, de Rob Porter,...
  									</a>
  					<a class="article no-picture" href="http://www.letelegramme.fr/cultures/litterature-dans-la-bibliotheque-de-nolwenn-leroy-05-02-2018-11840714.php" target="_self">
  				
  										Littérature. Dans la bibliothèque de Nolwenn Leroy
  														La chanteuse Nolwenn Leroy possède une riche culture littéraire, nourrie de romans gothiques, de poèmes d'Emily Dickinson, d'ouvrages de Pablo Neruda, d'Albert Cohen et même d'Olivier de Kersauson.
  									</a>
  					<a class="article no-picture" href="http://www.letelegramme.fr/france/nicolas-hulot-critique-ebdo-assume-et-se-defend-10-02-2018-11846371.php" target="_self">
  				
  										Nicolas Hulot. Critiqué, le magazine Ebdo assume et se défend
  														Le magazine Ebdo défend son enquête sur des accusations de violences sexuelles à l'encontre de Nicolas Hulot alors que plusieurs voix s'élèvent pour en critiquer la méthode et que l'auteure de la plainte, petite-fille de François Mitterrand, a regretté sa médiatisation.
  									</a>
  					<a class="article no-picture" href="http://www.letelegramme.fr/economie/electromenager-booste-par-l-immobilier-10-02-2018-11846358.php" target="_self">
  				
  										 Électroménager. Boosté par l'immobilier
  														Aspirateurs balais, robots cuiseurs et fours encastrables se sont vendus comme des petits pains l'an dernier. Les Français ont ainsi acheté pour huit milliards d'euros d'électroménager. C'est 3,4 %...
  									</a>
  					<a class="article no-picture" href="http://www.letelegramme.fr/france/apprentissage-l-executif-devoile-ses-mesures-10-02-2018-11846372.php" target="_self">
  				
  										Apprentissage. L'exécutif dévoile ses mesures
  														Des aides pour les apprentis, l'ouverture de l'apprentissage jusqu'à 30 ans, un prélèvement unique... Le gouvernement a dévoilé, vendredi, ses mesures pour relancer l'apprentissage.
  									</a>
  					<a class="article no-picture" href="http://www.letelegramme.fr/musique/vague-de-concerts-rock-chanson-celtique-05-02-2018-11840919.php" target="_self">
  				
  										Vague de concerts. Rock, chanson, celtique
  														L’offre musicale est abondante et de qualité cette semaine sur les scènes bretonnes. Légendes et jeunes pousses sont à l’affiche.
  									</a>
  				<br class="brClearAll" /></div>
  </div>
              


title: L’école de commerce, fabrique de la résignation
url: https://lapalice.fr/2018/02/06/ecole-de-commerce-fabrique-resignation/
created_at: 2018-02-10 10:05:42
updated_at: 2018-02-10 10:05:42
mimetype: text/html
language: fr-BE
domain_name: lapalice.fr
http_status: 200
content:
  <p><abbr title="too long ; didn't read" lang="en">TL;DR</abbr> : com­ment l’école de com­merce envoie chaque année une masse de résigné·e·s sur le marché du tra­vail ; plaidoy­er con­tre le réformisme.</p>
  <hr /><h1 class="western">Je suis en école de commerce, mais je suis sympa quand même</h1>
  <p>À chaque fois qu’on me demande ce que je fais et que je dis que je suis en école de com­merce, je ne peux pas m’empêcher d’ajouter une remar­que pseu­do-humoris­tique sur le fait que je suis sym­pa quand même, ou de pren­dre un petit air dégoûté en le dis­ant, ou de par­ler de ce que j’ai fait avant pour que les choses soient bien claires : cette école, ce n’est pas moi. Le plus sou­vent, la per­son­ne en face s’en fiche ; pour moi, c’est vital de le dire.</p>
  <p>J’ai essayé d’expliquer mon rap­port à ces années en école <a href="https://twitter.com/NLaPalice/status/952817357243723776">sur Twit­ter</a>, et j’ai été plutôt sur­prise de l’écho que ça a eu. À l’origine, c’était juste un coup de gueule dans le vide pen­dant l’énième présen­ta­tion d’un énième pro­jet, moment qui réveille tou­jours chez moi un malaise, à mi-chemin entre l’envie de quit­ter la salle et la résig­na­tion qui a fini par s’installer après trois ou qua­tre ans. Mais un thread sur Twit­ter, c’est trop court : j’ai envie de met­tre des mots sur cette exas­péra­tion, envie de décrire la dis­so­nance cog­ni­tive per­ma­nente que j’ai quand je suis en cours, et les dif­fi­cultés que ça me pose, au quo­ti­di­en ou dans mes rela­tions avec les autres. Expli­quer pourquoi je ne peux pas juste m’en foutre, expli­quer pourquoi j’ai arrêté de me pren­dre pour une cinquième colonne, pourquoi même l’attitude eth­nologique ne m’amuse plus.</p>
  <h2 class="western">Mission de conseil et dissonance cognitive</h2>
  <p>Je reprends ici le thread, de manière un peu plus com­plète. J’ai repris les cours en jan­vi­er sur une « mis­sion » : c’est comme ça qu’on désigne les semaines qu’on passe à imag­in­er des solu­tions inno­vantes pour des gross­es boîtes en mal de « dig­i­tal » (parce qu’en école de com­merce, on est dig­i­taux). Et ça com­mence : la mis­sion est pour une grosse boîte de cos­mé­tiques. Objec­tif : trou­ver de nou­veaux et nou­velles client·e·s. Notre cible : les <em lang="en">mil­lenials</em> européen·ne·s, dans les aéro­ports.</p>
  <p>Dans l’idéal, il s’agit de trou­ver une solu­tion qui s’appuie sur les don­nées qu’on a sur eux pour leur pouss­er une offre au bon moment. Tous les moyens sont per­mis : col­lecte de don­nées, <em lang="en">bea­cons</em> qui tra­cent leur déplace­ment dans l’aéroport, app qui les flique… Pourquoi on fait comme ça ? Parce que les gens voy­a­gent de plus en plus. Parce qu’on sait qu’ils sont plus vul­nérables quand ils s’ennuient. Parce qu’on peut faire de belles cam­pagnes de <em lang="en">dis­play</em> grâce à ces écrans qui rem­pla­cent les affich­es. Parce que les pro­duits de beauté se prê­tent bien à l’ambiance un peu luxe de l’aéroport et du <em lang="en">duty free</em>. Parce qu’une entre­prise qui ne croît pas, c’est une entre­prise qui meurt, alors il faut touch­er de nou­veaux et nou­velles client·e·s, à tout prix.</p>
  <p>Très bien, sauf que cha­cun de ces élé­ments va con­tre tout ce que je fais au quo­ti­di­en. Je con­sid­ère l’avion comme un désas­tre écologique. Je lutte con­tre les injonc­tions à la beauté, la plu­part du temps je ne me maquille pas, je ne m’épile pas. Je lutte con­tre la col­lecte de don­nées et le pro­fi­lage qui cherche à nous attein­dre dans nos moments de vul­néra­bil­ité. Je rage sur la con­som­ma­tion élec­trique de ces cen­taines d’écrans qui sont instal­lés dans les métros, les gares, la rue, à un moment où la ten­dance générale devrait être à la décrois­sance si on voulait avoir une infime chance de lim­iter notre impact envi­ron­nemen­tal.</p>
  <p>Et je me retrou­ve à écouter, con­cevoir et présen­ter des plans mar­ket­ing sur la base suiv­ante : puisque ces ten­dances exis­tent, il y a de l’argent à faire dessus. Je le fais parce que c’est là-dessus que je suis éval­uée, parce que finale­ment, ce n’est qu’un jeu, on joue aux consultant·e·s et ils jouent au <abbr title="comité exécutif">comex</abbr>, alors ça ne compte pas vrai­ment… Mais je ne crois pas qu’on puisse impuné­ment jouer au con­sul­tant, tous les jours, sans que ça ait un impact sur la façon dont on appréhende le monde. Et même si je hais la solu­tion que je leur pro­pose, je me rends compte que je n’arrive pas à ne pas défendre sa per­ti­nence quand on la remet en ques­tion au jury d’évaluation. Même si, de fait, cette propo­si­tion est aux antipodes de la société idéale que je pro­jette (si tant est que j’en pro­jette encore une).</p>
  <h2 class="western">Transformer la tendance en opportunité</h2>
  <p>C’est pour cela que je par­le de dis­so­nance cog­ni­tive. On m’évalue avec la règle tacite suiv­ante : « com­ment max­imiser le retour sur investisse­ment dans telles et telles con­di­tions ». Le pré­sup­posé : chang­er les con­di­tions n’est pas une option. Même si elles te débectent. Le tra­vail des consultant·e·s, c’est de trans­former les con­di­tions et les ten­dances en oppor­tu­nités de crois­sance, et peu impor­tent les con­séquences. <em>Exit</em> le recul cri­tique, <em>exit</em> la réflex­ion sur ce que ça fait de nous en tant que per­son­nes. Un autre point : on tra­vaille sys­té­ma­tique­ment en groupe. Insi­dieuse­ment, ça force à lim­iter la cri­tique et à agir de manière à ne pas trop ralen­tir la marche du pro­jet. On peut se plain­dre, mais pas trop – per­son­ne n’a envie d’être là de toute façon, que ce soit par flemme ou par dés­in­térêt.</p>
  <p>Alors, en qua­tre ans, je me suis résignée, d’autant que je sais qu’il y a de grandes chances que le reste du groupe ne partage pas mes idées. Si quelqu’un les partage, c’est peut-être pire encore, puisqu’on se retrou­ve à se regarder l’un l’autre abdi­quer sans  même avoir com­bat­tu. Et voir l’autre abdi­quer valide sa pro­pre abdi­ca­tion. À quoi bon avoir des pudeurs de gazelles pour bien mon­tr­er que « non, non, nous on n’est pas comme ça ». Peu importe ce que tu es, tu par­ticipes. Qu’est-ce qu’on va faire, se met­tre en grève sco­laire pour absence d’éthique du cap­i­tal­isme ?</p>
  <p>Dif­fi­cile, d’ailleurs, de con­stru­ire des ami­tiés dans ces con­di­tions (sauf à vouloir être la cau­tion de gauche). Tu as le choix entre avoir des ami·e·s qui te voient tous les jours renier tes con­vic­tions, ou te bat­tre en per­ma­nence sur tout, parce que même les fon­da­men­taux ne sont pas là. Ou à éviter tous les sujets qui fâchent, poli­tiques, philosophiques ou soci­aux. J’ai longtemps essayé d’être dans une atti­tude eth­nologique, mais c’est épuisant à long terme. Alors je nav­igue dans un entre-deux per­ma­nent, jamais trop déce­vant, jamais trop sat­is­faisant non plus.</p>
  <h2 class="western">Cinquième colonne ou cinquième roue du carosse ?</h2>
  <p>Deux répons­es qu’on me fait sou­vent, c’est que je suis là pour « appren­dre à con­naître l’ennemi», une sorte de cinquième colonne qui paierait de sa per­son­ne pour mieux détru­ire le sys­tème de l’intérieur. Et la deux­ième, un peu dans la même veine, c’est que ce que j’apprends ne me con­di­tionne pas, et que ce n’est qu’un socle clos de con­nais­sances sur des domaines var­iés (mar­ket­ing, finance, etc). Ça ne m’empêche pas d’agir selon mes principes et mes valeurs. <em lang="en">Spoil­er</em> : ce n’est pas aus­si sim­ple.</p>
  <p>Il n’y a pas de cinquième colonne. Parce que la reven­di­ca­tion prin­ci­pale de ce sys­tème c’est l’absence d’idéologie – rien de mieux pour couper l’herbe sous le pied de la cinquième colonne. Faire com­pren­dre que le prag­ma­tisme est une idéolo­gie en soi, c’est long, et dans 99% des cas, ça revient à met­tre de grands coups de poings dans un bloc de gelée indif­férent. C’est facile, ça ne fait pas mal. Mais ça n’a aucun impact. Tu peux frap­per aus­si fort que tu veux, la gelée absorbe le coup, se déforme légère­ment le temps  de l’impact et revient à son état ini­tial. Tu ne t’es pas fait mal, mais tu t’épuises rapi­de­ment, sans aucun résul­tat.</p>
  <p>Quant à con­sid­ér­er ces années en école comme un socle de con­nais­sances neu­tres, ça ne fonc­tionne pas non plus. Ce qu’on m’apprend, c’est un savoir-être, une manière de penser et d’appréhender le monde. C’est comme ça que l’école de com­merce fait son œuvre : elle t’apprend à te résign­er devant la sacro-sainte neu­tral­ité des « indi­ca­teurs», de la « mesure de la per­for­mance » ; à pass­er <a href="https://www.cairn.info/revue-francaise-de-sociologie-1-2007-1-page-37.htm">du souci sco­laire au sérieux man­agér­i­al,</a> avec les con­séquences qu’on con­naît. Elle sape toute volon­té de révolte en te faisant inté­gr­er, vivre les sché­mas cohérents der­rière le sys­tème en place, que ce soit l’actionnariat, les div­i­den­des, la gou­ver­nance, les plans soci­aux, et j’en passe. En te mon­trant les rouages, en te met­tant en sit­u­a­tion, elle te fait com­pren­dre que c’est ce que toi aus­si tu aurais fait, que la déci­sion « réduire les coûts», « vers­er de hauts div­i­den­des » est la déci­sion la plus froide­ment logique dans ces con­di­tions. Et même si tu tiques, que tu dés­ap­prou­ves, on con­voque <abbr title="there is no alternative" lang="en">TINA</abbr> : il n’y a pas d’alternative. Ou elle n’a pas sa place ici. Le cap­i­tal­isme, ça se fonde sur le cap­i­tal, et cette vérité crue s’incarne dans le fait que, majori­taire­ment, l’argent va là où l’arbitrage est le plus favor­able. Dans ces con­di­tions, pas de cinquième colonne, plutôt une cinquième roue du car­rosse. Et le car­rosse, ça ne l’empêche pas d’avancer.</p>


created_at: 2018-02-10 10:08:35
updated_at: 2018-02-10 10:08:35
mimetype: text/html
language: en-US
domain_name: blog.mozilla.org
preview_picture: https://blog.mozilla.org/wp-content/uploads/2018/02/Mozilla-blog-hero-1400x700.png
http_status: 200
title:
  Announcing “Project Things” – An open framework for connecting your devices to the web. – The Mozilla Blog

url:
  https://blog.mozilla.org/blog/2018/02/06/announcing-project-things-open-framework-connecting-devices-web/

content:
  <p>Last year, we <a href="https://hacks.mozilla.org/2017/06/building-the-web-of-things/" target="_blank" rel="noopener">said</a> that Mozilla is working to create a framework of software and services that can bridge the communication gap between connected devices. Today, we are pleased to announce that anyone can now build their own Things Gateway to control their connected device directly from the web.</p>
  <p>We kicked off “Project Things”, with the goal of building a decentralized ‘Internet of Things’ that is focused on security, privacy, and interoperability. Since our announcement last year, we have continued to engage in open and collaborative development with a community of makers, testers, contributors, and end-users, to build the foundation for this future.</p>
  <p>Today’s launch makes it easy for anyone with a Raspberry Pi to build their own Things Gateway. In addition to web-based commands and controls, a new experimental feature shows off the power and ease of using voice-based commands. We believe this is the most natural way for users to interact with their smart home. Getting started is easy, and we recommend checking out <a href="https://hacks.mozilla.org/2018/02/how-to-build-your-own-private-smart-home-with-a-raspberry-pi-and-mozillas-things-gateway/" target="_blank" rel="noopener">this tutorial</a> to get connected.</p>
  <h3>The Future of Connected Devices</h3>
  <p>Internet of Things (IoT) devices have become more popular over the last few years, but there is no single standard for how these devices should talk to each other. Each vendor typically creates a custom application that only works with their own brand. If the future of connected IoT devices continues to involve proprietary solutions, then costs will stay high, while the market remains fragmented and slow to grow. Consumers should not be locked into a specific product, brand, or platform. This will only lead to paying premium prices for something as simple as a “smart light bulb”.</p>
  <p>We believe the future of connected devices should be more like the open web. The future should be decentralized, and should put the power and control into the hands of the people who use those devices. This is why we are committed to defining open standards and frameworks.</p>
  <h3>A Private “Internet of Things”</h3>
  <p>Anyone can build a Things Gateway using popular devices such as the Raspberry Pi. Once it is set up, it will guide you through the process of connecting to your network and adding your devices. The setup process will provide you with a secure URL that can be used to access and control your connected devices from anywhere.</p>
  <h3>Powerful New Features</h3>
  <p>Our latest release of the Things Gateway has several new features available. These features include:</p>
  <ul><li>The ability to use the microphone on your computer to issue voice commands</li>
  <li>A rules engine for setting ‘If this, then that’ logic for how devices interact with each other</li>
  <li>A floor-plan view to lay out devices on a map of your home</li>
  <li>Additional device type support, such as smart plugs, dimmable and colored lights, multi-level switches and sensors, and “virtual” versions of them, in case you don’t have a real device</li>
  <li>An all-new add-on system for supporting new protocols and devices</li>
  <li>A new system for safely authorizing third-party applications (using OAuth)</li>
  </ul><h3>Built for <span style="text-decoration: line-through;">hackers</span> everyone</h3>
  <p>If you have been following our progress with Project Things, you’ll know that up to now, it was only really accessible to those with a good amount of technical knowledge. With today’s release, we have made it easy for anyone to get started on building their own Things Gateway to control their devices. We take care of the complicated stuff so that you can focus on the fun stuff such as automation, ‘if this, then that’ rules, adding a greater variety of devices, and more.</p>
  <h3>Getting Started</h3>
  <p>We have provided a full walkthrough of how to get started on building your own private smart home using a Raspberry Pi. You can view the complete walkthrough <a href="https://hacks.mozilla.org/2018/02/how-to-build-your-own-private-smart-home-with-a-raspberry-pi-and-mozillas-things-gateway/" target="_blank" rel="noopener">here</a>.</p>
  <p>If you have questions, or you would like to get involved with this project you can join the #iot channel on <a href="http://irc.mozilla.org" target="_blank" rel="noopener">irc.mozilla.org</a> and participate in the development on <a href="https://github.com/mozilla-iot" target="_blank" rel="noopener">GitHub</a>. You can also follow <a href="http://www.twitter.com/mozillaiot" target="_blank" rel="noopener">@MozillaIoT</a> on twitter for the latest news.</p>
  <p>For more information, please visit <a href="https://iot.mozilla.org" target="_blank" rel="noopener">iot.mozilla.org</a>.</p>


title: La ruée sur le Nutella, reflet du « totalitarisme de la consommation »
created_at: 2018-02-10 10:17:33
updated_at: 2018-02-10 10:17:33
mimetype: text/html
language: fr
domain_name: mobile.lemonde.fr
preview_picture: http://img.lemde.fr/2018/02/07/433/0/5199/2599/1200/0/0/0/fe88d3f_12146-13s4nqx.ss2e.jpg
http_status: 200
url:
  http://mobile.lemonde.fr/campus/article/2018/02/07/la-ruee-sur-le-nutella-reflet-du-totalitarisme-de-la-consommation_5253246_4401467.html?xtref=https://t.co/Ikq1HqYVW1

content:
  <div class="cm-figure__media-container">
      <div class="ca-lazy-img">
          <img class="js-lazy-img ca-lazy-img__img ca-lazy-img__img--placeholder" src="denied:data:image/gif;base64,%20iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAAC0lEQVQImWNgwAUAABoAAaQ3efYAAAAASUVORK5CYII=" alt="" /><noscript>
              <img src="http://img.lemde.fr/2018/02/07/0/0/5199/3466/450/0/0/0/fe88d3f_12146-13s4nqx.ss2e.jpg" class="ca-lazy-img__img ca-lazy-img__img--noscript" alt="" /></noscript>
      </div>
      
      
  </div>
                      
                  Des promotions sur le Nutella ont suscité de violentes bousculades dans les supermarchés, à la fin de janvier.
                                      DAMIEN MEYER / AFP
                              <p class="node-attr"><strong>Chronique Phil d’actu.</strong> A la fin de janvier, de super-promotions sur le Nutella puis sur les couches Pampers dans les magasins Intermarché ont dégénéré en <a href="http://lemonde.fr/big-browser/article/2018/01/25/ruee-sur-les-pots-de-nutella-en-promotion-c-etait-l-orgie_5247174_4832693.html">émeutes</a>. Filmées, ces scènes, dignes des fameux « Black Fridays » américains, ont fait le tour des réseaux sociaux et de la presse. Et chacun de s’interroger sur le sens que cela peut avoir de se mettre dans des états pareils pour si peu. Ou encore sur les causes économiques et psychologiques de cette <a href="http://www.slate.fr/story/156871/emeutes-nutella-promo">violence typique des périodes de pénurie</a>… dans une époque d’abondance comme la nôtre.</p>
  <p class="node-attr">Une chose est certaine : personne n’a fait l’erreur de prendre ce problème à la légère. Tout le monde y a vu un symptôme, <a href="http://lemonde.fr/economie-francaise/article/2018/02/04/intermarche-ne-fera-plus-de-promotion-a-70_5251496_1656968.html">y compris le patron d’Intermarché, Thierry Cotillard</a>. Mais un symptôme de quoi exactement ? De la précarité et du chômage, comme l’ont affirmé Yannick Jadot et Jean-Luc Mélenchon ? Du mépris pour des consommateurs <em>« infantilisés et partant, ridiculisés par ces supermarchés »</em> (qui ont organisé la promotion sous forme de chasse au trésor), comme l’a estimé <a href="https://www.franceculture.fr/emissions/lhumeur-du-matin-par-guillaume-erner/lhumeur-du-matin-par-guillaume-erner-vendredi-26-janvier-2018">Guillaume Erner sur France Culture</a> ? Ou encore, toujours selon <a href="https://www.franceculture.fr/emissions/lhumeur-du-matin-par-guillaume-erner/lhumeur-du-matin-par-guillaume-erner-lundi-29-janvier-2018">Guillaume Erner, qui est aussi docteur en sociologie</a>, de «<em> la nature même de la société de consommation,</em> [qui]<em> repose non sur des besoins mais sur des envies,</em> […]<em> des désirs très forts, que la société de consommation suscite et frustre dans le même temps » </em>?</p>
      
      
  <p class="node-attr">Il faut bien comprendre que nous vivons depuis plus de cinquante ans dans une société qui a assimilé le bonheur au bien-être, et le bien-être au toujours-plus de biens possédés. Cet idéal correspond à celui des Trente Glorieuses, à l’augmentation du pouvoir d’achat, à la démocratisation des appareils électroménagers et des voitures. Il correspond à ce que Pier Paolo Pasolini appelait <em>« le nouveau pouvoir »</em>, au <em>« totalitarisme de la consommation » </em>dont il disait dans ses <em>Ecrits corsaires</em> <em>« qu’il est le plus violent et le plus totalitaire qu’il y ait eu, car il change la nature des gens, il entre au plus profond des consciences »</em>.</p>
  <p class="node-attr">Ce nouvel hédonisme, qui refuse toute contrainte, entre en contradiction avec les ressources réelles, aussi bien financières que naturelles, et il a conduit à la situation que nous vivons actuellement. L’injonction à la consommation se heurte au mur du porte-monnaie et produit la frustration dont l’« affaire Nutella » est un symptôme. Nous nous trouvons face à un <em>double bind</em>, c’est-à-dire une double pression contradictoire : d’un côté il faut consommer toujours plus et de l’autre il faut <em>« se serrer la ceinture »</em> (par exemple pour réduire le déficit budgétaire). Or, la psychologie aussi bien que l’éthologie nous apprennent que le <em>double bind</em> est un facteur important de la souffrance mentale, et qu’il conduit à des réactions irrationnelles. Se battre pour un pot de Nutella en est un exemple….</p>
  <p class="node-attr">La réponse politique à cette situation est parfaitement révélatrice, puisqu’il va s’agir de <a href="http://lemonde.fr/economie/article/2018/01/31/guerre-des-prix-dans-l-alimentation-le-gouvernement-presente-son-projet-de-loi_5249672_3234.html">réglementer les promotions</a>… alors que l’avenir paraît incertain à un grand nombre de salariés du privé comme du public et que <a href="http://oxfamfrance.org/communique-presse/justice-fiscale/davos-2018-1-plus-riches-ont-empoche-82-des-richesses-creees-lan">le dernier rapport d’Oxfam</a> dénonce les inégalités de répartition des richesses. Le gouvernement semble préférer ne pas soumettre à la tentation plutôt que délivrer du mal.</p>
      
  <p class="node-attr">Dans ce conteste, le type de produits ayant suscité ces émeutes n’est pas anodin : la pâte à tartiner et les couches-culottes correspondent à une consommation de type familial. Bien que le taux de natalité en France soit légèrement en baisse (<a href="http://www.lemonde.fr/societe/article/2018/01/16/natalite-la-fin-de-l-exception-francaise_5242408_3224.html">1,88 enfant par femme en 2017</a> contre 1,92 en 2016, selon l’Insee), il reste le plus élevé d’Europe. Et <a href="https://www.la-croix.com/Famille/Actualite/La-famille-une-valeur-bien-ancree-en-Europe-2014-04-29-1143167">la famille tient la première place</a> parmi les valeurs des Européens et des Français. Tout laisse à penser que dans cette période d’instabilité, le repli sur la famille soit une solution psychiquement confortable pour beaucoup de gens. A l’encontre de ce qu’écrivait le philosophe Dany-Robert Dufour dans <em>Le Divin Marché</em> :</p>
  <blockquote class="ca-quotation"><div><em>« Si la famille ne fonctionne plus selon une distribution nécessaire de rôles marqués, elle tend alors en effet à se désinstitutionnaliser – ce qui n’implique pas la disparition de la famille, mais sa banalisation. De groupe structuré par des pôles et des rôles, la famille devient un simple groupement fonctionnel d’intérêts économico-affectifs : chacun peut vaquer à ses occupations propres, sans qu’il s’ensuive des droits et des devoirs spécifiques pour personne. Ce qui se solde par la fin des rituels familiaux classiques. »</em></div></blockquote>
  <p class="node-attr">Autrement dit, alors même que la famille ne fonctionne plus en tant qu’institution avec ses règles et ses rites (comme le repas en commun par exemple), elle n’en demeure pas moins non seulement une énorme préoccupation (comment nourrir sa famille), mais aussi le lieu privilégié dans lequel l’injonction à la consommation peut s’exercer. C’est dans la famille qu’on est censé trouver le calme et le confort qui manque dans le monde extérieur (principalement celui du travail), et ce confort, comme nous l’avons vu, ne peut advenir que dans la consommation.</p>
  <p class="node-attr">Là encore, Pasolini avait vu juste quand il écrivait, en 1974 :</p>
      
  <blockquote class="ca-quotation"><div><em>« La famille est redevenue ce puissant et irremplaçable centre infinitésimal qu’elle était jadis. Pourquoi ? Eh bien ! parce que la société de consommation a besoin de la famille. Un individu peut ne pas être le consommateur que souhaite le producteur ; il peut être un consommateur irrégulier, imprévisible, libre de ses choix, sourd, et, qui sait, capable de refuser, de renoncer à cet hédonisme qui est devenu la nouvelle religion. »</em></div></blockquote>
  <p class="node-attr">Un individu seul peut facilement renoncer à son Nutella (et a priori n’a pas besoin de couches-culottes Pampers), mais comment peut-il frustrer le désir de ses enfants, surtout quand Intermarché lui propose une réduction de 70 % ? Ce qui est terrifiant, c’est qu’il soit prêt pour cela à participer à une chasse au trésor ridicule et avilissante.</p>
      
  <p class="node-attr">Si l’affaire Nutella révèle au grand jour la souffrance des classes populaires (par définition plus soumises que les autres à la contradiction du nouvel hédonisme, du fait de leurs revenus), il me semble qu’il est trop réducteur de n’y voir que le problème de la précarité (sans en nier la réalité pour autant). Car ce serait prendre le risque d’assimiler violence et « populace », dans une rhétorique classique de la bourgeoisie qu’a très bien décrite Usul dans une vidéo pour <em>Mediapart</em>. Or les « élites » riches et éduquées ne sont pas moins soumises au <em>« totalitarisme de la consommation »</em>.</p>
  <iframe allowfullscreen="allowfullscreen" frameborder="0" height="333" width="100%" marginheight="0" marginwidth="0" scrolling="no" src="http://www.youtube.com/embed/6ZBJI4uNf3o">[embedded content]</iframe>
  <p class="node-attr">Toute l’effervescence autour du bio ou des alimentations « alternatives » (veganisme, régime paléo ou crudivore) témoigne d’un autre aspect du totalitarisme hédoniste : la création<em> « d’un troupeau </em>[dont]<em> chacun de ses membres se croit absolument libre alors même qu’il est entièrement télécommandé, conduit par une puissante et invisible main de fer »</em> (Dany-Robert Dufour, <em>Le Divin Marché</em>). Vouloir maîtriser son alimentation est bien sûr une bonne chose, et certains arguments, notamment des végans, peuvent s’entendre, mais certains ne voient pas (ou refusent de voir) qu’il y a contradiction à se faire livrer un plateau-repas « paléo » (c’est-à-dire inspiré du régime de l’homme au paléolithique) dans une barquette en plastique ; ou, comme j’en ai fait l’expérience récemment, qu’un magasin « bio » puisse, sans rougir, proposer un déodorant à la pierre d’alun… du Panama ! Pour le respect de l’environnement, il faudra repasser.</p>
  <p class="node-attr">Dans un cadre plus ou moins feutré, la violente injonction à consommer touche toutes les strates de la population. Il est trop facile de se croire le seul individu libre et autonome face à une masse affamée d’huile de palme. Lutter pour un partage plus équitable des richesses et une production plus respectueuse de l’environnement doit passer par une remise en cause de ce qui n’est pas seulement un modèle économique, mais une véritable culture. Sans quoi, notre idéal de vie restera pour toujours une couche Pampers pleine de Nutella…</p>
      
  <ul class="cm-list cm-list--bullet node-attr"><li>Pier Paolo Pasolini<em>, Ecrits corsaires</em>, Champs Flammarion, 2009</li><li>Dany-Robert Dufour, <em>Le Divin Marché</em>, Folio Gallimard, 2012</li></ul>


title: Facebook sans boussole morale
url: https://standblog.org/blog/post/2018/02/16/Facebook-sans-boussole-morale
created_at: 2018-02-16 11:40:55
updated_at: 2018-02-16 11:40:55
mimetype: text/html
language: fr
domain_name: standblog.org
preview_picture: https://standblog.org/dc-blog/public/2018/.Wired_cover_bruised_Zuck_m.jpg
http_status: 200
content:
  <p>Je titrais récemment <a href="https://standblog.org/blog/post/2018/02/09/En-vrac-du-vendredi" hreflang="fr">la mauvaise réputation de Facebook</a>, qui vient juste derrière Marlboro quand on demande aux américains de choisir les entreprises qui sont toxiques pour la société. Cette semaine continue dans la même veine, avec Wired qui balance une <a href="https://www.wired.com/story/inside-facebook-mark-zuckerberg-2-years-of-hell/" hreflang="en">couverture choc</a> :</p><p><a href="https://standblog.org/dc-blog/public/2018/Wired_cover_bruised_Zuck.jpg" title="Wired cover bruised Zuck.jpg"><img src="https://standblog.org/dc-blog/public/2018/Wired_cover_bruised_Zuck.jpg" alt="Wired cover bruised Zuck.jpg" title="Wired cover bruised Zuck.jpg, fév. 2018" /></a></p>
  <h3>“Réparer Facebook”</h3>
  <p>Début janvier, Zuckerberg, qui apparaît abimé sur le photomontage ci-dessus, promettait qu’il choisissait comme <a href="https://www.facebook.com/zuck/posts/10104380170714571">objectif personnel pour 2018</a> de “réparer Facebook”.</p>
  <p>Un mois et demi plus tard, on constate à quel point Facebook ne peut pas être “réparé”, pour la raison toute simple que la notion même d’éthique a toujours été absente de la culture d’entreprise. Le slogan de départ chez Facebook était “move fast and break things”, “aller vite et casser des choses”. Et on le voit à l’œuvre : casser des règles, des lois, des concurrents, et même des gens.</p>
  <h3>Mais continuer à piller les gens en misant sur leur besoin de sécurité</h3>
  <p>Aujourd’hui encore, on constate deux choses qui sont graves à mon sens, à savoir exploiter le besoin de sécurité des utilisateurs en vue de tirer plus d’eux. Deux exemples récents le prouvent :</p>
  <ol><li>Facebook, aux USA, a utilisé le numéro de téléphone que vous pouvez fournir pour sécuriser votre connexion<sup>[]</sup> pour vous spammer par SMS. Et si vous répondez, <a href="https://mashable.com/2018/02/14/facebook-spam-2fa/#Xl2l7QdMiiq7" hreflang="en">Facebook publie vos réponses sur votre page</a></li>
  <li>Depuis quelque temps, Facebook vous proposer — pour être plus en sécurité — d’utiliser <em>gratuitement</em> un service de VPN. Seulement voilà, Facebook est propriétaire de ce service et en profite pour pomper encore plus de données, comme par exemple <a href="http://www.businessinsider.fr/us/what-is-facebooks-onavo-protect-virtual-private-network-app-2018-2" hreflang="en">le temps que vous passez chez les services concurrents</a> ;</li>
  </ol><p><strong>Si Zuckerberg était si impatient de “réparer Facebook”, ne croyez-vous pas qu’il aurait pu mettre fin à ces deux pratiques scandaleuses qui visent à faire levier sur le sentiment d’insécurité des gens pour leur soutirer plus de data et plus d’attention ?</strong></p>
  <p>Pour moi, Facebook est un navire dont le capitaine a perdu sa boussole et son compas. Il affirme à qui veut bien l’entendre qu’il sait où il va, sans savoir où cela se trouve.</p>
  <h3>Un manque éthique ancré de longue date : l’affaire de la dopamine</h3>
  <p>L’errance morale de Facebook est profondément ancrée dans l’entreprise, la preuve en est dans l’affaire de la dopamine, qui date de 2004.</p>
  <p>La dopamine est un neurotransmetteur qui est émis par le cerveau et provoque du plaisir quand on reçoit des <em>likes</em>, des citations ou des commentaires sur les réseaux sociaux. Sean Parker, ancien président de Facebook en 2004 et 2005, expliquait comment les neurosciences et les pics de dopamine étaient utilisés pour rendre les gens accros à Facebook.</p>
  <p><a href="https://standblog.org/dc-blog/public/2018/Sean_Parker_et_dopamine.png" title="Sean Parker et dopamine.png"><img src="https://standblog.org/dc-blog/public/2018/.Sean_Parker_et_dopamine_m.png" alt="Sean Parker et dopamine.png" title="Sean Parker et dopamine.png, fév. 2018" /></a></p>
  <h3>Expliquer cela au grand public</h3>
  <p><a href="https://toulibre.org/pub/2017-11-18-capitole-du-libre/videos/le-libre-en-general/nitot-le-numerique-a-l-ere-du-cloud.mp4"><img src="https://standblog.org/dc-blog/public/2018/Capitole_du_libre_intro.jpg" alt="Capitole du libre intro.jpg" title="Capitole du libre intro.jpg, fév. 2018" /></a></p>
  <p>J’en ai fait une ou plutôt deux conférences :</p>
  <ul><li>En quinze minutes, orientée grand public : <a href="https://vimeo.com/251654559">Tristan Nitot - Prenons-nous le risque de vivre dans Matrix ?</a> ;</li>
  <li>En 55 minutes, pour les geeks : <a href="https://toulibre.org/pub/2017-11-18-capitole-du-libre/videos/le-libre-en-general/nitot-le-numerique-a-l-ere-du-cloud.mp4" hreflang="fr">à Toulouse Capitole du Libre</a>
  <ul><li><a href="https://tristan-drive.mycozy.cloud/public?sharecode=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJzaGFyZSIsImlhdCI6MTUxODc3NDI0NCwiaXNzIjoidHJpc3Rhbi5teWNvenkuY2xvdWQiLCJzdWIiOiJlbWFpbCJ9.xO0hORBeCZJ1ME7UpLzyH29bxt1Un_SqbUhQjBh6KHeyPv-khucMF2fmbr_iuBjMa0OtUk-vK0nXPFfF5t8owA&amp;id=b5cca6f39c73a580fae7ba8a9d92f1a7" hreflang="fr">présentation format PDF (8,7Mo)</a></li>
  <li><a href="http://april.org/numerique-libre-l-ere-du-cloud-se-resigner-vivre-dans-ecosysteme-google-tristan-nitot" hreflang="fr">Transcription</a> par l’équipe de l’APRIL que je remercie au passage ;</li>
  <li>Si les silos, c’est votre truc : <a href="https://www.slideshare.net/nitot/quel-rapport-entre-les-rseaux-sociaux-et-matrix">présentation sur Slideshare</a>.</li>
  </ul></li>
  </ul><h3>Argent partout, éthique nulle-part</h3>
  <p>Voilà, s’il fallait résumer le business de Facebook, on pourrait dire qu’ils se sont inspirés de la bonne vieille économie de l’attention (vous savez, quand le patron de TF1 expliquait qu’il “<a href="http://standblog.org/blog/post/2004/07/13/93113579-tf1-et-le-sens-de-la-vie">vendait à Coca Cola du temps de cerveau humain disponible</a>”, en 2004) qui s’est transformée, grâce au numérique, en <em>économie de l’addiction</em>. Rendre les utilisateurs accros pour les gaver de publicité.  Prendre leurs textes, leurs photos, leurs vidéos, leurs contacts, leurs données personnelles, filer de la dopamine en échange, pendant qu’on monétise les données avec de la publicité ciblée auprès d’annonceurs parfois douteux (<a href="https://www.theverge.com/2017/11/1/16593346/house-russia-facebook-ads">russes</a> ou <a href="https://www.theguardian.com/technology/2017/sep/14/facebook-advertising-jew-hater-antisemitism">racistes</a>).</p>
  <p><a href="https://standblog.org/dc-blog/public/2018/gratuite_facebook_pour_les_nuls.png" title="gratuite facebook pour les nuls.png"><img src="https://standblog.org/dc-blog/public/2018/.gratuite_facebook_pour_les_nuls_m.png" alt="gratuite facebook pour les nuls.png" title="gratuite facebook pour les nuls.png, fév. 2018" /></a></p>
  <p>C’était déjà ça le modèle de Facebook en 2004. Alors retrouver une boussole morale pour “réparer Facebook” ? Bonne chance, Mark…</p>


title: What is a JSON Web Token? // Rob McLarty
url: http://robmclarty.com/blog/what-is-a-json-web-token
created_at: 2018-02-21 09:21:20
updated_at: 2018-02-21 09:21:20
mimetype: text/html
language: en
domain_name: robmclarty.com
http_status: 200
content:
  <h2>"A <a href="https://tools.ietf.org/html/rfc7519">JSON Web Token (JWT)</a>, pronounced 'jot',&#13;
  is a compact URL-safe means of representing claims to be transferred between two&#13;
  parties. The claims in a JWT are encoded as a JSON object that is digitally&#13;
  signed using JSON Web Signature (JWS)".</h2>
  <h3>How we used to do authentication</h3>
  <p><img src="http://robmclarty.com/system/pictures/sources/64/flow-basic_large.jpg?1450223652" alt="Basic Auth Flow" /></p>
  <p>HTTP is a <em>stateless</em> protocol. That means it doesn't remember anything from
  request to request. If you login for one request, you'll be forgotten, and will
  need to login again to make another request. As you can imagine, this can get
  very annoying fast.</p>
  <p>The old-school solution has been to create what's called a "session". A session
  is implemented in two parts:</p>
  <ol><li>An object stored on the server that remembers if a user is still logged in, a reference to their profile, etc.</li>
  <li>A cookie on the client-side that stores some kind of ID that can be referenced on the server against the session object's ID.</li>
  </ol><h3>Cookie-based Auth</h3>
  <p><img src="http://robmclarty.com/system/pictures/sources/65/flow-cookie-session_large.jpg?1450223782" alt="Cookie-based Auth Flow" /></p>
  <p>If a user visits a web page (makes a request) and the server detects a session
  cookie, it will check if it currently has a session stored with the ID from the
  cookie, and if that object is still valid (whatever that means: not expired, not
  revoked, not blacklisted, etc.).</p>
  <p>If the session is still valid, it will respond with the requested web page (or
  data). If it finds a session object, that object can contain data in it and with
  that, the server can "remember" who you are and what you were doing (e.g., if this
  is an ecommerce store, what products you've added to our shopping cart).</p>
  <p>If the session is not valid (or no session cookie was detected) it will respond
  with some sort of error message saying that the request is "unauthorized".</p>
  <p>New sessions can typically be created by sending a username/password combination
  to a specific endpoint from a login page. If the server can match a user with
  that username and password, it will generate a new session object on the server
  and set a cookie on the client with the session's ID for any future requests.</p>
  <p>If a user turns off their computer and comes back to the website some time in
  the future, s/he can either automatically login again (if there is still a
  cookie in the browser that hasn't expired) or login again through the login
  page. Once logged in, the user's session can be retrieved again from the data
  stored on the server, and the user can go on with their business (e.g.,
  continuing to shop after reloading your shopping cart).</p>
  <p>This type of setup has worked pretty well for us since the web came out and
  since we've been visiting web sites that do most of their "thinking" on the
  server side. Typically this has been a conversation between the user's frontend
  browser and a corresponding backend server in a one-to-one relationship.</p>
  <p><img src="http://robmclarty.com/system/pictures/sources/66/multiserver-cookie_large.jpg?1450224002" alt="Multi-server Cookie Auth Flow is Broken" /></p>
  <p>This setup still works, but these days we have many different situations that
  require different setups (e.g., multiple mobile native apps alongside large
  single-page web apps contacting multiple backend services, that may be nothing
  more than json data without a webpage at all). In these types of scenarios, the cookie you get from one server, won't correspond (or even be sent) to another server (let alone the problems that get created with CORS).</p>
  <h3>Drawbacks With Cookie-based Auth</h3>
  <p><img src="http://robmclarty.com/system/pictures/sources/67/multiserver-cookie2_large.jpg?1450224113" alt="Complex Multi-server Cookie Auth Flow" /></p>
  <ul><li><strong>Multiple Backends</strong>: What if your app needs to talk to a database backend as
  well as a separate image processing backend? more and more, our digital world
  is being split up into separate micro-services; when authenticating with more
  than one backend, things can get complicated (e.g., you could either proxy
  all requests through a central app server which would then need to <em>know</em> all
  the logic of each secondary service, or each service could implement complex
  inter-server communication (and CORS) to verify incoming session IDs with a
  central auth server... in either case extra load on the app server is required
  and more complex interconnects need to be maintained).</li>
  <li><strong>Sessions</strong>: need to be stored somewhere, either in memory, in a database, or
  keyvalue store like Redis; and they need to be managed so that they are
  removed when they expire or are otherwise invalidated.</li>
  <li><strong>Poor Scalability</strong>: The session store needs to be scaled when scaling the
  server. The store uses up resources, and adds complexity.</li>
  <li><strong>Performance Issues</strong>: When the session needs to be stored on the server, a
  lot of database/store lookups need to happen on every request which can bog
  down the server.</li>
  <li><strong>Native Apps (or non-browser apps)</strong>: Browsers handle cookies, but custom
  apps don't (at least not easily), so a different kind of session mechanism is
  needed.</li>
  <li><strong>CSRF</strong>: If cookies are being used, extra security is needed to prevent
  cross-site request forgergy attacks since the cookie will be automatically
  sent to the server with any request made from that site.</li>
  <li><strong>CORS</strong>: Cookies + CORS don't play well across different domains (actually,
  real cross-domain doesn't work at all).</li>
  </ul><h3>JSON Web Tokens Are Better</h3>
  <p>JWTs don't use sessions, have no problem with native apps, and actually don't
  even need special CSRF protections, and they works like a charm with CORS.</p>
  <p><img src="http://robmclarty.com/system/pictures/sources/68/flow-jwt_large.jpg?1450224340" alt="JWT Auth Flow" /></p>
  <p>With JWT you register yourself with an app (much the same way you would with an
  old-school app) and you login with your credentials (e.g., username/password, or 3rd party OAuth).
  But instead of making a session and setting a cookie, the server will send you a
  JSON Web Token instead. Now you can use that token to do whatever you want to do with the
  server (that you have authorization to do).</p>
  <p>Think of it like a hotel key: you register
  at the front-desk, and they give you one of those plastic electronic keys with
  which you can access your room, the pool, and the garage, but you can't open
  other people's rooms or go into the manager's office. And, like a hotel key,
  when your stay has ended, you're simply left with a useless piece of plastic
  (i.e., the token doesn't do anything anymore after it's expired).</p>
  <p><img src="http://robmclarty.com/system/pictures/sources/69/multiserver-jwt_large.jpg?1450224622" alt="Multi-server JWT Auth Flow" /></p>
  <p>In a multi-server setup, you could also imagine a JWT akin to a "Festival Pass" like you would get at a film or music festival. Whereas an individual movie ticket will grant you access to a single movie (from which you can leave to get popcorn or use the restroom and return), a Festival Pass will grant you access to any movie in the entire festival at different locations at different times. In the same way, you can take your JWT generated from one server, and use it to authenticate with totally different servers (on different domains) which share the same verification method (e.g., share a secret). Each of those other servers don't need to "call home" to ask if the token is ok, because they can simply do a quick computation on the token itself and check its signature and expiration time directly without incurring a hit to the database or an additional network request.</p>
  <h3>How JWT Works</h3>
  <p>A JWT is self-contained. When you create one, it has all the necessary pieces you
  need to do the things you want to do on a server packaged up inside it.
  There are 3 main parts, separated by a ".":</p>
  <ol><li>a header</li>
  <li>a payload</li>
  <li>a signature</li>
  </ol><p>The header normally contains two things: 1. the type of the token (how the payload
  can be interpreted), and 2. the name of the algorithm used to make the signature
  (e.g., <code>{typ: 'JWT', alg: 'HS256'}</code>). This gets encoded into base64.</p>
  <p>The payload is a JSON object of data. You can put whatever you want in it (e.g.,
  <code>{userId: 2}</code> or maybe even <code>{userId: 2, admin: true}</code>. This also gets encoded
  into base64.</p>
  <p>The signature is a hash of the encoded header, the encoded payload, and a
  "secret" key that you provide (stored safely on the server) using the algorithm
  defined in the header.</p>
  <p>At the end, you get a string that looks something like "xxxxxxxx.yyyyy.zzzzzzzz"
  where "x" is the encoded header, "y" is the encoded payload, and "z" is the
  encrypted signature.</p>
  <p>The header and payload can be easily decoded on the front-end or the back-end to
  retrieve any information you want in there (it's just base64). Keep this in mind because these
  values are essentially "public", so don't put any private information in there
  like a credit card number or a password or something.</p>
  <p>Whenever you make a request to the server, you send the token with your request.
  Typically this is done in the authorization header like "Authorization: Bearer
  xxxxxx.yyyyy.zzzzzz". But it could also be passed in a POST body or in the URL itself as a query parameter.
  When the server sees the token, it decodes it and compares the signature with
  the secret it has stored which would have been used to generate the token in the
  first place. If everything matches, the request is authentic, and it responds
  with data, otherwise it sends back an error message.</p>
  <p>Here's a real token example. You can use this nice service <a href="http://jwt.io/">jwt.io</a> to easily inspect the token if you want to see what's inside it.</p>
  <pre>eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vZXhhbXBsZS5v
  cmciLCJhdWQiOiJodHRwOi8vZXhhbXBsZS5jb20iLCJpYXQiOjEzNTY5OTk1MjQsIm5iZ
  iI6MTM1NzAwMDAwMCwiZXhwIjoxNDA3MDE5NjI5LCJqdGkiOiJpZDEyMzQ1NiIsInR5cC
  I6Imh0dHBzOi8vZXhhbXBsZS5jb20vcmVnaXN0ZXIiLCJjdXN0b20tcHJvcGVydHkiOiJ
  mb28iLCJuYW1lIjoiUm9iIE1jTGFydHkiLCJpZCI6Nzh9.-3BnaA1XRiKh8e7zy9ZRTET
  f8VngoypqrVW98oQnH4w
  </pre>
  <p>The server takes information from the token's payload (e.g., like a "userId")
  and constructs its response accordingly. This is how the server "remembers" the
  user... because it can use the id it finds to check the user's name and other
  profile information against it's account in the database (or it can simply use what data is in the payload directly without hitting the database at all). If special access
  rights have been granted to the user, those can be retrieved from the token as
  well (e.g., admin privileges).</p>
  <p>The key to all this (pun intended) is the "secret" string that is stored on the
  server. This is a piece of information that only the server knows which is used
  to make new tokens and validate existing ones. Because the server is the only
  thing that knows the secret, it prevents unauthorized access by attackers
  because it would be technically too difficult to decrypt a captured signature,
  or to guess the secret in order to spoof a contrived signature before an issued
  token expires. Remember to never share your secret with anybody and to send it
  to your server over a secure line (e.g., using SSH).</p>
  <p>You can also setup other servers to use the same secret so that a token created
  by one server could also be used to authenticate with a completely different
  server (client to server, or server to server). More advanced setups can also be
  created using JWA (JSON Web Algorithms) where a central auth server stores a
  single secret and third-party servers receive a public key generated from that
  secret and use the public key to request authentication services from the auth
  server when the third-party server gets a request (suffice it to say, there are
  lots of different ways of setting things up; it's very flexible).</p>
  <p>If an attacker tries to tamper with the payload data (e.g., to give themselves
  admin rights), the corresponding signature won't match (because the signature
  was generated from the original data in the payload) and as such that token
  won't be considered valid on the server and any requests made with it will be
  denied. The only way to create an authentic token is with the secret (which
  should only be on the server and never published).</p>
  <p>A JWT can also include other useful information in its payload, called "claims".
  Most important is an expiry date. If an expiry date is included, the token will
  automatically become invalid when that date has passed.</p>
  <h3>Standard JWT Claims</h3>
  <p>There is a set of standard properties you can use in your payload to handle different use-cases in
  your app.  Claims like this can be used to increase the security of your system
  to prevent a number of different kinds of attacks. Be sure to check what's
  available in the library you choose.</p>
  <ul><li><strong>iss</strong>: the issuer of the token</li>
  <li><strong>sub</strong>: the subject of the token</li>
  <li><strong>aud</strong>: the audience of the token</li>
  <li><strong>exp</strong>: this will probably be the registered claim most often used. This will
  define the expiration as a NumericDate value. The expiration MUST be after the
  current date/time.</li>
  <li><strong>nbf</strong>: defines the time before which the JWT MUST NOT be accepted for
  processing</li>
  <li><strong>iat</strong>: the time the JWT was issued. Can be used to determine the age of the
  JWT</li>
  <li><strong>jti</strong>: unique identifier for the JWT. Can be used to prevent the JWT from
  being replayed. This is helpful for a one time use token.</li>
  </ul><p>Example payload:</p>
  <pre>{  
    "iss": "http://example.org",  
    "aud": "http://example.com",  
    "iat": 1356999524,  
    "nbf": 1357000000,  
    "exp": 1407019629,  
    "jti": "id123456",  
    "typ": "https://example.com/register",  
    "custom-property": "foo",  
    "name": "Rob McLarty",  
    "id": 78  
  }
  </pre>
  <h3>How to Invalidate a JWT</h3>
  <p>The coolest part of a JWT is that its claims can include its expiration settings
  and because the signature is a function of the hash of these settings, all the
  server needs to do is check the expiration info when it verifies the token and
  reject it if it has expired. What this means is that you don't need to worry too
  much about it. After issuing a token, just leave it out in the wild and let it
  die on its own.</p>
  <p>Obviously not every app can afford to do this. Sometimes having a valid token
  out in the open for even an day is potentially too long (e.g., perhaps to grant
  a user access to their account if they forgot their password). Sometimes you may
  only want a token to be used once-only (e.g., for a password reset). Other times
  you may have a malicious user registered in your system whom you want to ban
  altogether so that any tokens they've already created can't be used to access
  the system anymore.</p>
  <p>These scenarios can be handled (if needed) through a combination of JWT claims
  and server-side mechanisms. Keep the following options in mind when considering
  token invalidation and expiry:</p>
  <ul><li>remove the token from the client</li>
  <li>maintain a token blacklist</li>
  <li>keep expiry times short</li>
  </ul><p>The first option simply "throws out" the token and lets it expire on its own.</p>
  <p>The second option is a bit more involved in that it tracks actual tokens stored
  on the server (e.g., in a database or key/value store) and uses this list during token verification
  to check if a token has been blacklisted. This is kind of the opposite of
  session stores, but it's still more performant because as tokens naturally
  expire, they can simply be removed from the blacklist. The blacklist is only
  needed to invalidate a token that has not yet expired.</p>
  <p>Finally, in general, you should keep your token expiration times short anyway
  (like under 24 hours; maybe just 1 or 2 hours) so that in a worst-case scenario,
  an attacker only has less than a day to take advantage (which is likely not
  nearly enough time to brute-force the signature's encryption, even with a
  super-computer... the jury's still out on quantum computers).</p>
  <h3>Advantages of JWTs</h3>
  <ul><li><strong>No Session to Manage (stateless)</strong>: The token has everything you need to
  identify users, and the rest of your app's state can be stored in
  local storage on the client side. No need for a session object stored on the server.</li>
  <li><strong>Portable/Homogenous</strong>: A single token can be used with multiple backends, even on different domains.</li>
  <li><strong>No Cookies Required</strong>: You can store the token however we want: e.g., in localStorage, indexDB, or some native store (or cookies, if you really want).</li>
  <li><strong>Mobile Friendly</strong>: Developing native apps (iOS, Android, Windows 8, etc.) is
  difficult and cumbersome with cookies (e.g., you have to deal with cookie
  containers), but adopting a token-based approach greatly simplifies this.</li>
  <li><strong>Built-in Expiration</strong>: JWT has standard claims that can be set in the
  payload when a new token is created. Nothing more needs to be done.</li>
  <li><strong>Don't Need to Logout</strong>: Just throw away the token when you're done with it, it will expire on its own.
  You usually want to give a short expiration time, but if you really want to,
  you can keep track of a "blacklist" of tokens that are marked as "invalid" on
  the server which could be added to from an explicit logout, or from an
  administrator marking certain tokens as invalid.</li>
  <li><strong>Works with CORS</strong>: A token-based auth approach allows you to make AJAX calls
  to any server, on any domain because you can use an HTTP header to transmit the
  user information.</li>
  <li><strong>Leverage CDNs</strong>: You can serve all the assets for your app from a CDN (e.g.,
  javascript, HTML, images, etc.) and your server side can just be a stateless API.</li>
  <li><strong>Easy to Debug</strong>: JWTs can be inspected and their data reviewed (whereas
  sessions are stored on the server and are a lot harder to see and understand).</li>
  <li><strong>Decoupled/Decentralized</strong>: The token can be generated anywhere.
  Authentication can happen on the resource server, or easily separated into
  its own server, or "self-issued", or otherwise be completely externalized.</li>
  <li><strong>CSRF Doesn't Matter</strong>: because if you don't have a token, you can't do
  anything. Since you don't need to rely on cookies, you don't need to protect
  against cross site requests (e.g., it would not be possible to <code>&lt;iframe&gt;</code> your
  site, generate a POST request, and re-use the existing authentication cookie
  because there will be none) since the JWT needs to be explicitly included
  in the request header, and doesn't get set automatically like a cookie.</li>
  <li><strong>Good Performance</strong>: A network round-trip (e.g., finding a session in the
  database, deserializing it, then extracting the information you're interested
  in) is likely to take more time than calculating a HMACSHA256 to validate a
  token and parse its contents.</li>
  <li><strong>Standard-Based</strong>: Read the spec: <a href="https://tools.ietf.org/html/rfc7519">RFC 7519</a>
  supported by multiple backend libraries (.NET, Ruby, Java, Python, PHP,
  Javascript), and companies backing their infrastructure (e.g., Firebase,
  Google, Microsoft, Zendesk).</li>
  </ul><p>That's it! Go forth and free yourself from your cookie oppressors!</p>
  <h3>References</h3>
  <ul><li><a href="https://github.com/auth0/node-jsonwebtoken">node-jsonwebtoken</a></li>
  <li><a href="http://www.kb.cert.org/vuls/id/804060">Why Cookies are Bad</a></li>
  <li><a href="https://www.youtube.com/watch?v=lDb_GANDR8U">Make your Angular app a max security prison</a> (video)</li>
  <li><a href="https://www.youtube.com/watch?v=eWUkxzyB1Rk">MNUG 2014 - Lightning talk: JWT: JSON Web Token</a> (video)</li>
  <li><a href="https://auth0.com/docs/jwt">Auth0</a></li>
  <li><a href="http://jwt.io/">JWT.io</a></li>
  <li><a href="http://angular-tips.com/blog/2014/05/json-web-tokens-introduction/">Json Web Tokens: Introduction</a></li>
  <li><a href="http://websec.io/2014/08/04/Securing-Requests-with-JWT.html">Securing Requests with JWT</a></li>
  <li><a href="http://www.intridea.com/blog/2013/11/7/json-web-token-the-useful-little-standard-you-haven-t-heard-about">The useful little standard you haven't heard about</a></li>
  <li><a href="https://scotch.io/tutorials/the-anatomy-of-a-json-web-token">The anatomy of a JSON Web Token</a></li>
  <li><a href="https://auth0.com/blog/2014/12/02/using-json-web-tokens-as-api-keys/">Using JSON Web Tokens as API Keys</a></li>
  </ul>


title: A roadmap to becoming a web developer in 2017 – freeCodeCamp
created_at: 2018-02-23 11:35:09
updated_at: 2018-02-23 11:35:09
mimetype: text/html
domain_name: medium.freecodecamp.org
preview_picture: https://cdn-images-1.medium.com/max/1200/1*GD5sdzPlE3h4ljSWNaPx0Q.png
http_status: 200
url:
  https://medium.freecodecamp.org/a-roadmap-to-becoming-a-web-developer-in-2017-b6ac3dddd0cf?gi=594bf8c5d791

content:
  <div class="postArticle-content js-postField js-notesSource js-trackedPost"><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><p id="fe86" class="graf graf--p graf-after--figure">These charts were created by GitHub user <a href="http://bit.ly/2oLBJRO" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Kamranahmedse</a>. They visualize three roadmaps to becoming a web developer.</p><p class="graf graf--p graf-after--p">Even though I disagree with some of his suggestions (I recommend you starting building projects almost immediately — and you will with <a href="http://bit.ly/2onlMic" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">freeCodeCamp’s curriculum</a>), I still think this is worth reading. It will give you a birds-eye view of the modern tools that web developers use.</p><p class="graf graf--p graf-after--p">Here’s his chart for front-end development:</p></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">And for back-end development:</p></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">And for DevOps, which he views as an extension of back-end development:</p></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">Don’t be intimidated by all this. <a href="https://www.freecodecamp.com" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">freeCodeCamp will teach you many of these web development tools for free</a>. And you’ll build dozens of projects — and contribute to open source — in the process.</p><p class="graf graf--p graf-after--p">I encourage you to make use of all the awesome free resources out there on the internet. And if you’re looking for a solid core curriculum, <a href="https://www.freecodecamp.com" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">we’ve got you covered</a>.</p><p class="graf graf--p graf-after--p graf--trailing"><strong class="markup--strong markup--p-strong">I only write about programming and technology. If you </strong><a href="https://twitter.com/ossia" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank"><strong class="markup--strong markup--p-strong">follow me on Twitter</strong></a><strong class="markup--strong markup--p-strong"> I won’t waste your time. 👍</strong></p></div></div></div><div class="u-fixed u-bottom0 u-sizeFullWidth u-backgroundWhite u-boxShadowTop u-borderBox u-paddingTop10 u-paddingBottom10 u-zIndexMetabar u-xs-paddingLeft10 u-xs-paddingRight10 js-stickyFooter"><div class="u-maxWidth700 u-marginAuto u-flexCenter"><div class="u-fontSize16 u-flex1 u-flexCenter"><div class="u-flex0 u-inlineBlock u-paddingRight20 u-xs-paddingRight10"><a class="link u-baseColor--link avatar avatar--roundedRectangle" href="https://medium.freecodecamp.org" title="Go to freeCodeCamp"><img src="https://cdn-images-1.medium.com/fit/c/80/80/1*MotlWcSa2n6FrOx3ul89kw.png" class="avatar-image avatar-image--smaller" alt="freeCodeCamp" /></a></div><div class="u-flex1 u-inlineBlock"><p>Never miss a story from<strong> freeCodeCamp</strong>, when you sign up for Medium. <a class="link u-baseColor--link link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Medium/personalize-your-medium-experience-with-users-publications-tags-26a41ab1ee0c#.hx4zuv3mg">Learn more</a></p><p>Never miss a story from<strong> freeCodeCamp</strong></p></div></div></div></div>


title: No title found
created_at: 2018-02-23 16:07:44
updated_at: 2018-02-23 16:07:44
mimetype: text/html
domain_name: www.linkedin.com
http_status: 999
url:
  https://www.linkedin.com/pulse/demain-tous-augment%C3%A9s-la-diminution-de-notre-humanit%C3%A9-fran%C3%A7ois-geuze?trk=eml-email_feed_ecosystem_digest_01-recommended_articles-11-Unknown&midToken=AQEQaOMElGMADA&fromEmail=fromEmail&ut=1v40KkASzUnU81

content:
[cell repeats an earlier one in this file: 191 characters]


title: No title found
created_at: 2018-02-23 16:08:00
updated_at: 2018-02-23 16:08:00
mimetype: text/html
domain_name: www.linkedin.com
http_status: 999
url:
  https://www.linkedin.com/pulse/comprendre-les-dangers-de-lexternalisation-laurent-faibis?trk=eml-email_feed_ecosystem_digest_01-recommended_articles-10-Unknown&midToken=AQEQaOMElGMADA&fromEmail=fromEmail&ut=3EOr2SBGbUnU81

content:
[cell repeats an earlier one in this file: 191 characters]


title: No title found
created_at: 2018-02-23 16:08:09
updated_at: 2018-02-23 16:08:09
mimetype: text/html
domain_name: www.linkedin.com
http_status: 999
url:
  https://www.linkedin.com/pulse/les-banques-traditionnelles-sont-elles-d%C3%A9j%C3%A0-%C3%A9chec-mat-cunniet?trk=eml-email_feed_ecosystem_digest_01-recommended_articles-9-Unknown&midToken=AQEQaOMElGMADA&fromEmail=fromEmail&ut=3vGY587l3UnU81

content:
[cell repeats an earlier one in this file: 191 characters]


title: 7 Practical Tips for Cheating at Design – Refactoring UI – Medium
url: https://medium.com/refactoring-ui/7-practical-tips-for-cheating-at-design-40c736799886
created_at: 2018-02-23 16:08:20
updated_at: 2018-02-23 16:08:20
mimetype: text/html
domain_name: medium.com
preview_picture: https://cdn-images-1.medium.com/max/1200/1*YgsvBILjjtgtW1vz2L0alA.png
http_status: 200
content:
  <div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h1 class="graf graf--h3 graf--leading graf--title">7 Practical Tips for Cheating at Design</h1><h2 class="graf graf--h4 graf-after--h3 graf--subtitle">Improving your designs with tactics instead of talent.</h2><p id="a995" class="graf graf--p graf-after--h4">Every web developer inevitably runs into situations where they need to make visual design decisions, whether they like it or not.</p><p class="graf graf--p graf-after--p">Maybe the company you work for doesn’t have a full-time designer and you need to implement the UI for a new feature on your own. Or maybe you’re hacking on a side-project and you want it to look better than <em class="markup--em markup--p-em">yet-another-Bootstrap-site.</em></p><p class="graf graf--p graf-after--p">It’s easy to throw your hands up and say,<em class="markup--em markup--p-em"> “I’ll never be able to make this look good, I’m not an artist!”</em> but it turns out there are a ton of tricks you can use to level up your work that don’t require a background in graphic design.</p><p id="d144" class="graf graf--p graf-after--p graf--trailing">Here are seven simple ideas you can use to improve your designs today<em class="markup--em markup--p-em">.</em></p></div></div><div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 class="graf graf--h3 graf--leading">1. Use color and weight to create hierarchy instead of size</h3></div><div class="section-inner sectionLayout--outsetColumn"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*7oh6p-XStALhzNMsKyps1w.png" alt="image" /></div></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">A common mistake when styling UI text is relying too much on font size to control your hierarchy.</p><p class="graf graf--p graf--startsWithDoubleQuote graf-after--p"><em class="markup--em markup--p-em">“Is this text important? Let’s make it bigger.”</em></p><p class="graf graf--p graf--startsWithDoubleQuote graf-after--p"><em class="markup--em markup--p-em">“Is this text secondary? Let’s make it smaller.”</em></p><p id="c040" class="graf graf--p graf-after--p">Instead of leaving all of the heavy lifting to font size alone, <strong class="markup--strong markup--p-strong">try using color or font weight to do the same job</strong>.</p><p id="a033" class="graf graf--p graf--startsWithDoubleQuote graf-after--p"><em class="markup--em markup--p-em">“Is this text important? </em><strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">Let’s make it bolder.</em></strong><em class="markup--em markup--p-em">”</em></p><p id="eaff" class="graf graf--p graf--startsWithDoubleQuote graf-after--p"><em class="markup--em markup--p-em">“Is this text secondary? </em><strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">Let’s use a lighter color.</em></strong><em class="markup--em markup--p-em">”</em></p><p id="d4bd" class="graf graf--p graf-after--p">Try and stick to two or three colors:</p><ul class="postList"><li id="b13c" class="graf graf--li graf-after--p">A dark (<a href="https://ianstormtaylor.com/design-tip-never-use-black/" class="markup--anchor markup--li-anchor" rel="nofollow noopener nofollow noopener" target="_blank">but not black</a>) color for primary content <em class="markup--em markup--li-em">(like the headline of an article)</em></li><li id="e801" class="graf graf--li graf-after--li">A grey for secondary content <em class="markup--em markup--li-em">(like the date an article was published)</em></li><li id="da98" class="graf graf--li graf-after--li">A lighter grey for ancillary content <em class="markup--em markup--li-em">(maybe the copyright notice in a footer)</em></li></ul><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*YgsvBILjjtgtW1vz2L0alA.png" alt="image" /></div><p id="d0dd" class="graf graf--p graf-after--figure">Similarly, two font weights is usually enough for UI work:</p><ul class="postList"><li id="d340" class="graf graf--li graf-after--p">A normal font weight <em class="markup--em markup--li-em">(400 or 500 depending on the font)</em> for most text</li><li id="ff45" class="graf graf--li graf-after--li">A heavier font weight <em class="markup--em markup--li-em">(600 or 700)</em> for text you want to emphasize</li></ul><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*-3bCVP1BmdOlpLVhdsf82A.png" alt="image" /></div><p id="b1f3" class="graf graf--p graf-after--figure graf--trailing"><strong class="markup--strong markup--p-strong">Stay away from font weights under 400 for UI work</strong>; they can work for large headings but are too hard to read at smaller sizes. If you’re considering using a lighter weight to de-emphasize some text, use a lighter color or smaller font size instead.</p></div></div><div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 class="graf graf--h3 graf--leading">2. Don’t use grey text on colored backgrounds</h3><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*mJNQKesDhIBNahphhHYs6w.png" alt="image" /></div><p class="graf graf--p graf-after--figure">Making text a lighter grey is a great way to de-emphasize it on white backgrounds, but it doesn’t look so great on colored backgrounds.</p><p class="graf graf--p graf-after--p">That’s because the effect we’re actually seeing with grey on white is <em class="markup--em markup--p-em">reduced contrast</em>.</p><p class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Making the text closer to the background color is what actually helps create hierarchy</strong>, not making it light grey.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*_ePvWjK_OfkzlrHkm6BnXA.png" alt="image" /></div><p class="graf graf--p graf-after--figure">There are two ways you can reduce contrast when working with colorful backgrounds:</p><h4 class="graf graf--h4 graf-after--p">1. Reduce the opacity of white text</h4><p class="graf graf--p graf-after--h4">Use white text and lower the opacity. This lets the background color bleed through a bit, de-emphasizing the text in a way that doesn’t clash with the background.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*R3PXb00mvKlqe7MmLIc9Xw.png" alt="image" /></div><h4 id="be77" class="graf graf--h4 graf-after--figure"><strong class="markup--strong markup--h4-strong">2. Hand-pick a color that’s based on the background color</strong></h4><p id="e1b6" class="graf graf--p graf-after--h4">This works better than reducing the opacity when your background is an image or pattern, or when reducing the opacity makes the text feel too dull or washed out.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*VV3HdleqILozFwMDaXeC1w.png" alt="image" /></div><p class="graf graf--p graf-after--figure graf--trailing">Choose a color that’s the same hue as the background, adjusting saturation and lightness until it looks right to you.</p></div></div><div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 class="graf graf--h3 graf--leading">3. Offset your shadows</h3></div><div class="section-inner sectionLayout--outsetColumn"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*KFcx2TaeKVHG3AO5OoCuhQ.png" alt="image" /></div></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">Instead of using large blur and spread values to make box shadows more noticeable, add a vertical offset.</p><p class="graf graf--p graf-after--p">It looks a lot more natural because it simulates a light source shining down from above like we’re used to seeing in the real world.</p><p class="graf graf--p graf-after--p">This applies to inset shadows like you might use on wells or form inputs too:</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*Wfx1lgewcSk2rZVJwnJGJw.png" alt="image" /></div><p id="b539" class="graf graf--p graf-after--figure graf--trailing">If you’re interested in learning more about shadow design, the <a href="https://material.io/guidelines/material-design/elevation-shadows.html" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">Material Design Guidelines</a> are a fantastic primer.</p></div></div><div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 class="graf graf--h3 graf--leading">4. Use fewer borders</h3></div><div class="section-inner sectionLayout--outsetColumn"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*_eaHRdNQ_PxzymgiDBUlfw.png" alt="image" /></div></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">When you need to create separation between two elements, try to resist immediately reaching for a border.</p><p class="graf graf--p graf-after--p">While borders are a great way to distinguish two elements from one another, they aren’t the <em class="markup--em markup--p-em">only</em> way, and using too many of them can make your design feel busy and cluttered.</p><p class="graf graf--p graf-after--p">The next time you find yourself reaching for a border, try one of these ideas instead:</p><h4 id="b2c1" class="graf graf--h4 graf-after--p">1. Use a box shadow</h4><p id="be10" class="graf graf--p graf-after--h4">Box shadows do a great job of outlining an element like a border would, but can be more subtle and accomplish the same goal without being as distracting.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*qH-2RAS3rbnql-vpP8flmg.png" alt="image" /></div><h4 class="graf graf--h4 graf-after--figure"><strong class="markup--strong markup--h4-strong">2. Use two different background colors</strong></h4><p class="graf graf--p graf-after--h4">Giving adjacent elements slightly different background colors is usually all you need to create distinction between them. If you’re already using different background colors in addition to a border, try removing the border; you might not need it.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*MXl8E6iezVfxpL1fPIrHgQ.png" alt="image" /></div><h4 class="graf graf--h4 graf-after--figure">3. Add extra spacing</h4><p class="graf graf--p graf-after--h4">What better way to create separation between elements than to simply increase the separation? Spacing things further apart is a great way to create distinction between groups of elements without introducing any new UI at all.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*ruf8ZA1merZZZHtel0NGmw.png" alt="image" /></div></div></div><div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 id="e14f" class="graf graf--h3 graf--leading">5. Don’t blow up icons that are meant to be small</h3></div><div class="section-inner sectionLayout--outsetColumn"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*Ah6d10k727vhX9m7L2StXQ.png" alt="image" /></div></div><div class="section-inner sectionLayout--insetColumn"><p id="eede" class="graf graf--p graf-after--figure">If you’re designing something that could use some large icons <em class="markup--em markup--p-em">(like maybe the “features” section of a landing page)</em>, you might instinctively grab a free icon set like <a href="https://fontawesome.com/" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">Font Awesome</a> or <a href="http://www.zondicons.com/" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">Zondicons</a> and bump up the size until they fit your needs.</p><p class="graf graf--p graf-after--p">They’re vector images after all, so the quality isn’t going to suffer if you increase the size right?</p><p class="graf graf--p graf-after--p">While it’s true that vector images won’t degrade in quality when you increase their size, <strong class="markup--strong markup--p-strong">icons that were drawn at 16–24px are never going to look very professional when you blow them up to 3x or 4x their intended size.</strong> They lack detail, and always feel disproportionately “chunky”.</p></div><div class="section-inner sectionLayout--outsetColumn"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*6QKl3o2JK9djxrkAzM2aEw.png" alt="image" /></div></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">If small icons are all you’ve got, try enclosing them inside another shape and giving the shape a background color:</p></div><div class="section-inner sectionLayout--outsetColumn"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*98FX1W06xGiXJYVYStmtQg.png" alt="image" /></div></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">This lets you keep the actual icon closer to its intended size, while still filling the larger space.</p><p id="f37d" class="graf graf--p graf-after--p graf--trailing">If you have the budget, you could also use a premium icon set designed to be used at larger sizes, like <a href="http://www.heroicons.com/" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">Heroicons</a> or <a href="https://useiconic.com/" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">Iconic</a>.</p></div></div><div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 id="f8bc" class="graf graf--h3 graf--leading">6. Use accent borders to add color to a bland design</h3></div><div class="section-inner sectionLayout--outsetColumn"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*YM6Wb0xnV7E452fvWxJpxw.png" alt="image" /></div></div><div class="section-inner sectionLayout--insetColumn"><p id="f9c2" class="graf graf--p graf-after--figure">If you’re not a graphic designer, how do you add that dash of visual flair to your UI that other designs get from beautiful photography or colorful illustrations?</p><p id="cb1f" class="graf graf--p graf-after--p">One simple trick that can make a big difference is to add colorful accent borders to parts of your interface that would otherwise feel a bit bland.</p><p class="graf graf--p graf-after--p">For example, along the side of an alert message:</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*KNP-vTxNx9LFErut8sJvlQ.png" alt="image" /></div><p id="e4b0" class="graf graf--p graf-after--figure">…or to highlight active navigation items:</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*bLVdALS3GeuVO1UOM09ZkA.png" alt="image" /></div><p class="graf graf--p graf-after--figure">…or even across the top of your entire layout:</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*YMrMBgjpbuTs_WqdbhymNg.png" alt="image" /></div><p class="graf graf--p graf-after--figure">It doesn’t take any graphic design talent to add a colored rectangle to your UI, and it can go a long way towards making your site feel more “designed.”</p><p class="graf graf--p graf-after--p graf--trailing"><em class="markup--em markup--p-em">Have a hard time picking colors? Try choosing from a constrained palette like </em><a href="https://dribbble.com/colors" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank"><em class="markup--em markup--p-em">Dribbble’s color search</em></a><em class="markup--em markup--p-em"> to avoid feeling overwhelmed by the endless possibilities of a traditional color picker.</em></p></div></div><div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 id="fc7a" class="graf graf--h3 graf--leading">7. Not every button needs a background color</h3></div><div class="section-inner sectionLayout--outsetColumn"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*d4cSVthCYgX57KQjcw7SpA.png" alt="image" /></div></div><div class="section-inner sectionLayout--insetColumn"><p id="e9ac" class="graf graf--p graf-after--figure">When there are multiple actions a user can take on a page, it’s easy to fall into the trap of designing those actions based purely on semantics.</p><p class="graf graf--p graf-after--p">Frameworks like Bootstrap sort of encourage this by giving you a menu of semantic styles to choose from whenever you’re adding a new button:</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*2xkDfSjvq7Xyb_ceInrMpw.png" alt="image" /></div><p id="e583" class="graf graf--p graf--startsWithDoubleQuote graf-after--figure"><em class="markup--em markup--p-em">“Is this a positive action? Make the button green.”</em></p><p class="graf graf--p graf--startsWithDoubleQuote graf-after--p"><em class="markup--em markup--p-em">“Does this delete data? Make the button red.”</em></p><p class="graf graf--p graf-after--p">Semantics are an important part of button design, but there’s a more important dimension that’s commonly forgotten: <strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">hierarchy.</em></strong></p><p class="graf graf--p graf-after--p">Every action on a page sits somewhere in a pyramid of importance. Most pages only have one true primary action, a couple of less important secondary actions, and a few seldom used tertiary actions.</p><p class="graf graf--p graf-after--p">When designing these actions,<strong class="markup--strong markup--p-strong"> it’s important to communicate their place in the hierarchy.</strong></p><ul class="postList"><li class="graf graf--li graf-after--p"><strong class="markup--strong markup--li-strong">Primary actions should be obvious.</strong> Solid, high contrast background colors work great here.</li><li id="f3a9" class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Secondary actions should be clear but not prominent. </strong>Outline styles or lower contrast background colors are great options.</li><li id="b61d" class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Tertiary actions should be discoverable but unobtrusive.</strong> Styling these actions like links is usually the best approach.</li></ul><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*CiEQ9mpfpfAXp62pTE2fbw.png" alt="image" /></div><p class="graf graf--p graf--startsWithDoubleQuote graf-after--figure"><em class="markup--em markup--p-em">“What about destructive actions, shouldn’t they always be red?”</em></p><p class="graf graf--p graf-after--p">Not necessarily! If the destructive action isn’t the <em class="markup--em markup--p-em">primary</em> action on the page, it might be better to give it a secondary or tertiary button treatment.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*pIMOui8TSM_gUX9xNFyBng.png" alt="image" /></div><p class="graf graf--p graf-after--figure">Save the big, red, and bold styling for when that negative action actually <em class="markup--em markup--p-em">is</em> the primary action in the interface, like in a confirmation dialog:</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*cuYcwjOO26sKHImHaY6yFA.png" alt="image" /></div></div></div><div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf--leading graf--trailing"><em class="markup--em markup--p-em">If you enjoyed this post, be sure to visit </em><a href="https://refactoringui.com" class="markup--anchor markup--p-anchor" rel="nofollow noopener noopener nofollow noopener" target="_blank"><em class="markup--em markup--p-em">RefactoringUI.com</em></a><em class="markup--em markup--p-em"> and subscribe to get notified when we publish something new.</em></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>


title: Dropbox saved almost $75 million over two years by building its own tech infrastructure
created_at: 2018-02-26 16:08:32
updated_at: 2018-02-26 16:08:32
mimetype: text/html
language: en-US
domain_name: www.geekwire.com
preview_picture: https://cdn.geekwire.com/wp-content/uploads/2017/05/Colocation.gif
http_status: 200
url:
  https://www.geekwire.com/2018/dropbox-saved-almost-75-million-two-years-building-tech-infrastructure/

content:
  <p><img src="https://cdn.geekwire.com/wp-content/uploads/2017/05/Colocation-630x443.gif" alt="" width="630" height="443" class="size-full-width wp-image-332561" />A typical data center setup. (Courtesy: Wikipedia)</p>
  <p>After making the decision to roll its own infrastructure and reduce its dependence on Amazon Web Services, Dropbox reduced its operating costs by $74.6 million over the next two years, <a href="https://www.sec.gov/Archives/edgar/data/1467623/000119312518055809/d451946ds1.htm">the company said in its S-1 statement Friday</a>.</p>
  <p>Starting in 2015, <a href="https://www.wired.com/2016/03/epic-story-dropboxs-exodus-amazon-cloud-empire/">Dropbox began to move users</a> of its file-storage service away from AWS’s S3 storage service and onto its own custom-designed infrastructure and software, and the cost benefits were immediate. From 2015 to 2016, Dropbox saved $39.5 million in the cost of revenue bucket thanks to the project, which reduced spending on “our third-party datacenter service provider” by $92.5 million offset by increased expenses of $53 million for its own data centers. The following year in 2017, it saved an additional $35.1 million in operating costs beyond the 2016 numbers.</p>
  <strong><a href="https://www.geekwire.com/2018/dropbox-makes-official-files-go-public-later-year-1b-2017-revenue/">Dropbox makes it official, files to go public later this year with $1B in 2017 revenue</a></strong><br />
  <p>Dropbox was once the quintessential cloud success story, a startup that built a massive user base and brand presence thanks to its use of Amazon Web Services. Obviously, lots of companies are still happy to pay AWS to manage their infrastructure, as evidenced by <a href="https://www.geekwire.com/2018/amazon-web-services-hits-5b-quarterly-revenue-no-signs-slowing/">the steady gains the cloud market leader made in 2017</a>.</p>
  <p>But once certain startups turn into big companies with hundreds of millions of users, with computing needs that they’ve come to intimately understand, it can be far more efficient to set up computing infrastructure designed exactly with those needs in mind. After a multiyear process, Dropbox completed what it calls its “Infrastructure Optimization” project in the fourth quarter of 2016.</p>
  <p>“Our Infrastructure Optimization reduced unit costs and helped limit capital expenditures and associated depreciation. Combined with the concurrent increase in our base of paying users, we experienced a reduction in our cost of revenue, an increase in our gross margins, and an improvement in our free cash flow in the periods presented,” the company said in its S-1 statement, referring to 2015 through 2017.</p>
  <p>Dropbox still uses AWS for less than 10 percent of its storage needs, it said in the statement. The company operates three data centers in the U.S. but none in Europe, and uses AWS resources in Europe to serve some customers on that continent.</p>


title: How to Create a GraphQL API in Kotlin
url: http://adavis.info/2018/02/graphql-api-in-kotlin.html
created_at: 2018-02-27 15:15:32
updated_at: 2018-02-27 15:15:32
mimetype: text/html
language: en-US
domain_name: adavis.info
preview_picture: https://i0.wp.com/adavis.info/wp-content/uploads/2018/02/pablo.png?fit=1024%2C512
http_status: 200
content:
  <p><img class="aligncenter size-full wp-image-301" src="https://i1.wp.com/adavis.info/wp-content/uploads/2018/02/tertia-van-rensburg-37121-unsplash.jpg?resize=750%2C431" alt="" /></p><p>There are several freely available datasets online. One platform I came across was <strong>Kaggle. </strong>It supports <strong>analytics competitions</strong> based on <strong>user-mined</strong> datasets. After a bit of digging, I uncovered a CSV file of user reported <a href="https://www.kaggle.com/NUFORC/ufo-sightings">UFO Sightings</a>. This turned out to be interesting data. For instance, which countries had the most reported UFO sightings? Is there a particular day of the week where sightings occur the most? I had so many questions! My first step however, was to expose the data as a <strong>GraphQL</strong> API.</p>
  <h3>Dependencies Used</h3>
  <p>I wanted to experiment with various libraries written entirely in Kotlin. These are the ones that I chose in order to create my GraphQL Server:</p>
  <p>* <a href="http://ktor.io">Ktor</a> – Server Framework<br />* <a href="https://github.com/Ekito/koin">Koin</a> – Dependency Injection<br />* <a href="https://github.com/pgutkowski/KGraphQL">KGraphQL</a> – GraphQL Support<br />* <a href="https://github.com/orangy/squash">Squash</a> – Database Access</p>
  <p>Here’s the dependencies block of the <strong>build.gradle</strong> file:</p>
  <pre>dependencies {&#13;
      // Kotlin&#13;
      compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"&#13;
  &#13;
      // Ktor Server&#13;
      compile "io.ktor:ktor-server-core:$ktor_version"&#13;
      compile "io.ktor:ktor-server-netty:$ktor_version"&#13;
      compile "io.ktor:ktor-gson:$ktor_version"&#13;
      compile "io.ktor:ktor-locations:$ktor_version"&#13;
  &#13;
      // Logging&#13;
      compile "ch.qos.logback:logback-classic:$logback_version"&#13;
  &#13;
      // Networking&#13;
      compile "com.github.kittinunf.fuel:fuel:$fuel_version"&#13;
  &#13;
      // GraphQL&#13;
      compile "com.github.pgutkowski:kgraphql:$kgraphql_version"&#13;
  &#13;
      // Dependency Injection&#13;
      compile "org.koin:koin-ktor:$koin_version"&#13;
  &#13;
      // Database&#13;
      compile "org.jetbrains.squash:squash-h2:$squash_version"&#13;
  &#13;
      // Testing&#13;
      testCompile group: 'junit', name: 'junit', version: '4.12'&#13;
  }&#13;
  </pre>
  <h3>
  Project Structure</h3>
  <p>The code can be found in the <code>src/main/kotlin</code> folder. From there it’s broken down into the following packages:</p>
  <ul><li><code>info/adavis</code> – contains the <strong>Ktor</strong> application class, routes and the <strong>KGraphQL</strong> schema</li>
  <li><code>info/adavis/model</code> – contains the <strong>UFOSighting</strong> data class</li>
  <li><code>info/adavis/di</code> – contains the <strong>Koin</strong> dependency module</li>
  <li><code>info/adavis/dao</code> – contains the <strong>CSV parser</strong> for the UFO Sighting data and the <strong>DAO</strong> for accessing the <strong>H2</strong> database</li>
  </ul><p>Finally the <code>resources</code> folder holds the Ktor server configuration and the UFO Sightings CSV file.</p>
  <img class="wp-image-302 size-full" src="https://i0.wp.com/adavis.info/wp-content/uploads/2018/02/project_structure.png?resize=283%2C403" alt="" />Project Structure<h3>
  Ktor Application Setup</h3>
  <p>Ktor is a framework that aims to be a simple and powerful way to create connected applications. This made it ideal for my use-case. I just wanted to expose one endpoint <strong>/graphql</strong> and grab the data from an <strong>H2</strong> database. Ktor operates based on what it calls “<strong>Pipelines</strong>“. This allows you to add on to the Server only what you need. Here’s a standard setup in the <code>main()</code> function:</p>
  <pre>install(DefaultHeaders)&#13;
  install(CallLogging)&#13;
  install(Locations)&#13;
  install(ContentNegotiation) {&#13;
    gson {&#13;
      setPrettyPrinting()&#13;
    }&#13;
  }&#13;
  &#13;
  importData()</pre>
  <p>What this gives you is some headers with application info when a response is sent, logging support, and then automatic content conversion that uses Gson. And believe it or not you can now run your application. The final piece for us in the <code>main()</code> function however, is to parse the CSV file with the UFO sighting data and store it in the H2 database. For that we create a simple method <code>importData</code> and we call it after we’ve set up our pipelines.</p>
  <h3>
  Database Setup</h3>
  <p>In order to store and query our data, we’re using the <a href="http://www.h2database.com/html/main.html">H2 database</a>. It’s small, fast and offers robust SQL querying options. However, in the spirit of keeping things minimal I used the <a href="https://github.com/orangy/squash">Squash</a> Kotlin library to serve as a data access layer for H2.</p>
  <p>First, you define an object to represent your database tables. I decided to call the table, <code>UFOSightings</code>. Here’s it’s definition:</p>
  <pre>object UFOSightings : TableDefinition() {&#13;
      val id = integer("id").autoIncrement().primaryKey()&#13;
      val date = date("date")&#13;
      val city = varchar("city", 128)&#13;
      val state = varchar("state", 4)&#13;
      val country = varchar("country", 4)&#13;
      val shape = varchar("shape", 28)&#13;
      val duration = decimal("duration", 10, 2)&#13;
      val comments = varchar("comments", 1024)&#13;
      val latitude = decimal("latitude", 12, 8)&#13;
      val longitude = decimal("longitude", 12, 8)&#13;
  }</pre>
  <p>Key things to note are <strong>first</strong>, you need to extend the <code>TableDefinition</code> class. And then <strong>second</strong>, each column is represented by a property in your class. It’s a simple mapping between the fields of your model object and their database representation.</p>
  <p>Next, we’ll define an Interface that we’ll use to represent our data storage class, <code>UFOSightingStorage</code>. It contains the basic methods that we will call from our <strong>GraphQL</strong> resolver functions. Notice that although we used the <code>UFOSightings</code> class for our table definition, we actually use the <code>UFOSighting</code> data class for our business logic.</p>
  <pre>interface UFOSightingStorage : Closeable {&#13;
  &#13;
      fun createSighting(sighting: UFOSighting): Int&#13;
      fun getSighting(id: Int): UFOSighting?&#13;
      fun getAll(size: Long): List&#13;
  }&#13;
  </pre>
  <p>Finally, we implement this interface as the <a href="https://github.com/adavis/ufo-sightings-api/blob/master/src/main/kotlin/info/adavis/dao/UFOSightingDatabase.kt" target="_blank" rel="noopener">UFOSightingDatabase</a> class. Let’s take a look at one of the methods, <strong>getAll()</strong>:</p>
  <pre>override fun getAll(size: Long): List&lt;UFOSighting&gt;  = db.transaction {&#13;
      from(UFOSightings)&#13;
              .select()&#13;
              .orderBy(UFOSightings.date, false)&#13;
              .limit(size)&#13;
              .execute()&#13;
              .map { it.toUFOSighting() }&#13;
              .toList()&#13;
  }&#13;
  </pre>
  <p>Here, we want to retrieve a set number of <code>UFOSighting</code> objects from the <code>UFOSightings</code> table. We use a Squash DB transaction to execute a <strong>select statement</strong> and then <strong>map</strong> the result to our list of desired objects. A lot of power in a small amount of code!</p>
  <h3>GraphQL Schema Definition</h3>
  <p>With our database in place, we can now set up our GraphQL schema, using <a href="https://github.com/pgutkowski/KGraphQL">KGraphQL</a>. We’ll start by specifying our GraphQL Types:</p>
  <pre>val schema = KGraphQL.schema {&#13;
  &#13;
      type&lt;UFOSighting&gt; {&#13;
          description = "A UFO sighting"&#13;
      }&#13;
  }&#13;
  </pre>
  <p>We use the <code>type</code> DSL and supply our <code>UFOSighting</code> data class. Then we can also add a <strong>description</strong> for our type. <em>(Note: At the time of this writing, the description was not being returned in introspection queries.)</em></p>
  <p>Next, we want to prepare the queries that we’ll support on our GraphQL Server. We define those with the <code>query</code> DSL:</p>
  <pre>val schema = KGraphQL.schema {&#13;
  &#13;
      query("sightings") {&#13;
          resolver { size: Long -&gt; storage.getAll(size) }.withArgs {&#13;
              arg { name = "size"; defaultValue = 10 }&#13;
          }&#13;
      }&#13;
  &#13;
      type&lt;UFOSighting&gt; {&#13;
          description = "A UFO sighting"&#13;
      }&#13;
  }&#13;
  </pre>
  <p>This means that when we receive the <strong>sightings</strong> query, we will check the <code>size</code> argument and attempt to return that number of UFO sightings. If the <code>size</code> is not provided we’ll default to the number <code>10</code>. But notice that we’re using a function on the <strong>storage</strong> object to retrieve the records. Where did that come from?</p>
  <p>Our <strong>schema</strong> is contained inside of a wrapper class, <code>AppSchema</code>. This class uses dependency injection, via <strong>Koin</strong>, to inject an instance of the <code>UFOSightingStorage</code> class.</p>
  <pre>class AppSchema(private val storage: UFOSightingStorage) {&#13;
  &#13;
      val schema = KGraphQL.schema {&#13;
          ...&#13;
      }&#13;
  &#13;
  }&#13;
  </pre>
  <h3>
  Dependency Injection</h3>
  <p>Getting dependencies with <a href="https://github.com/Ekito/koin">Koin</a> is very simple. You create a <strong>module</strong> and by means of a succinct DSL, you specify the dependencies you need. If you’ve worked with more complex frameworks in the past, this is a breeze to understand and implement. I think it’s ideal for small applications, like our sample app here.</p>
  <pre>val mainModule = applicationContext {&#13;
      provide { AppSchema(get()) }&#13;
      provide { UFOSightingDatabase() as UFOSightingStorage }&#13;
  }&#13;
  </pre>
  <h3>
  API Endpoint</h3>
  <p>The final piece to make this work is to expose our <em>/graphql</em> endpoint so that we can make our GraphQL query requests. For this we’re going to use <strong>Ktor Routes</strong> and <strong>Locations</strong>.</p>
  <pre>@Location("/graphql")&#13;
  data class GraphQLRequest(val query: String = "")&#13;
  &#13;
  fun Route.graphql(log: Logger, schema: Schema) {&#13;
      post&lt;GraphQLRequest&gt; {&#13;
          val request = call.receive&lt;GraphQLRequest&gt;()&#13;
          val query = request.query&#13;
          log.info("the graphql query: $query")&#13;
  &#13;
          call.respondText(schema.execute(query), ContentType.Application.Json)&#13;
      }&#13;
  }&#13;
  </pre>
  <p>To specify an endpoint, you pass a string to the <code>@Location</code> annotation. Then you create a <strong>data class</strong> to represent the <strong>post/get</strong> request data. This allows for type safety and code completion when working with your HTTP requests.</p>
  <p>Next, inside of our <code>post</code> function, we can grab the <strong>query</strong> value and then execute it against our GraphQL schema. Finally, we return the result as JSON. This will allow us to run queries on our <strong>GraphQL Server</strong>.</p>
  <p><img class="aligncenter size-large wp-image-303" src="https://i1.wp.com/adavis.info/wp-content/uploads/2018/02/graphiql_ufo_sightings.gif?resize=1024%2C532" alt="" /></p>
  <p>I had fun working on this project, it’s nice to explore different kinds of datasets. You can find the complete project <a href="https://github.com/adavis/ufo-sightings-api/tree/master">here</a> on GitHub.</p>


created_at: 2018-02-27 15:15:44
updated_at: 2018-02-27 15:15:44
mimetype: text/html
language: fr-FR
domain_name: www.numerama.com
preview_picture: https://www.numerama.com/content/uploads/2018/02/visuel_bullshit_therapie_4.png
http_status: 200
title:
  Bullshit Thérapie #4 : l’auto-promo sur les réseaux sociaux, très heureux d’être honoré d’être fier - Pop culture - Numerama

url:
  https://www.numerama.com/pop-culture/332221-bullshit-therapie-4-lauto-promo-sur-les-reseaux-sociaux-tres-heureux-detre-honore-detre-fier.html

content:
  <p class="chapo">L'autopromotion sociale à l'ère des réseaux, un phénomène bien étrange. Dans notre Bullshit Thérapie hebdomadaire, Vinvin s'interroge sur les arcanes de cette pratique presque universelle.</p><p class="p1">J’ai du mal avec ce vocabulaire d’autopromotion autosatisfaite que l’on s’impose sur les réseaux sociaux et qui frise à la caresse intime exposée au plus grand nombre. J’ai d’autant plus de mal que j’y ai succombé moi aussi, en quatorze ans de réseaux et de blogging. Je parle de ces statuts où l’on s’autocongratule d’un truc super qui nous arrive et qu’on le partage avec le monde pour que cela se sache, pour que chaque follower comprenne à quel point votre vie est fantastique et parce qu’on n’est jamais mieux servi que par soi-même.</p>
  <blockquote><p class="quote-large">Très heureux d’avoir été interviewé par M6</p></blockquote>
  <p class="p1">Pour que cela fasse moins prétentieux, on supprime le « <i>Je suis »</i> en début de phrase et chacun s’exprime alors par adjectifs de congratulation personnelle : heureux, fier, content, honoré, reconnaissant et j’en passe… <i>« Très heureux d’avoir été interviewé par M6 sur la transformation digitale » </i>et d’ajouter un remerciement à la journaliste qu’on a préalablement suivie sur Linkedin pour l’occasion. <i>« Merci Nathalie pour ce reportage à la fois passionnant et bien documenté… »</i>.</p>
  <p class="p1">La journaliste viendra liker votre statut et chacun se dira que vous connaissez du beau monde.</p>
  <p class="p1">J’ai surtout du mal avec les retweets des tweets qui disent du bien de vous. </p>
  <p class="p1">Ces tweets où quelqu’un dit du bien de votre travail-expertise-vidéo-livre-conférence-film-etc ?, et que vous retweetez immédiatement sans plus de commentaire… Comme si vous disiez : « <i> Regardez on parle de moi on m’aime et je dois vous le signaler sinon vous risqueriez de passer à côté de cette information majeure</i> ». </p>
  <p class="p1">Comme si dans un café bondé soudain vous montiez sur une chaise pour hurler « <i>Le type avec qui je parle et que je ne connais pas vient de dire qu’il avait adoré mon livre ! </i> ». Ensuite vous redescendez et vous recommencez vingt minutes plus tard, « <i>La dame ici présente vient d’affirmer que c’était l’ouvrage le plus intéressant qu’elle ait lu ces six derniers mois ! </i> », et vous redescendez jusqu’à la prochaine fois. Sachant que dans ce même café, d’autres personnes font la même chose à intervalles réguliers ou en même temps ; cela donne une atmosphère un peu flippante. Je grossis le trait, mais je l’ai fait, et pas qu’une fois.</p>
  <p><a href="https://www.numerama.com/content/uploads/2017/05/instagram-filtre.jpg"><img class="aligncenter size-large wp-image-258534" src="https://www.numerama.com/content/uploads/2017/05/instagram-filtre-1024x768.jpg" alt="" width="1024" height="768" /></a></p>
  <p class="p1">Il faut admettre que ces comportements sont souvent plus visibles et fréquents chez les célébrités, entraînées à faire savoir à leurs groupies que d’autres groupies sont sur l’action et que si vous voulez vous aussi être retweeté par votre idole, il vous suffit de dire un truc gentil, même si vous n’avez que douze followers dont votre mère et vos onze bots russes. « <i> J’ai trop adoré ton concert t’étais au top. Merci d’être là pour nous Trevor ! </i> ». Prévenu par un hashtag de dopamine égocentrique, l’artiste Trevor va retweeter le message ; et le groupie de retweeter le retweet pour hurler au monde que son idole l’a retweeté. Amusé, Trevor retweete le retweet du groupie qui s’évanouit alors, se cogne sur la table basse et va poster son selfie depuis l’hôpital sur Instagram. </p>
  <p class="p1">Du coup Trevor retweete l’Instagram du groupie et le publie sur son fil Facebook et ensuite ça se déchaîne : la maison de disques suggère que le groupie soit invité en backstage au prochain concert de Trevor qui retweete le tweet de la maison de disque, relayé par les fans de Trevor qui en font la une de leur page officielle. Le Groupie retweete les fans qui retweetent Trevor relayant la maison de disques qui retweetait le groupie en train de s’instagramer après s’être évanouie à cause du retweet de son retweet de Trevor faisant suite à son Tweet d’origine. Et chacun d’être très heureux d’être trop fier de partager ce bonheur d’être en train de se manipuler à distance, entre caresses d’ego, de bons sentiments et de business à peine déguisé.</p>
  <blockquote><p class="quote-large">C’est quand même super étrange comme chorégraphie</p></blockquote>
  <p class="p1">Collusions surnaturelles, tout le monde le fait, vous le faites, je le fais, ce n’est pas bien méchant et ça n menace pas l’intégrité du monde. Mais c’est quand même super étrange comme chorégraphie.</p>


title: Pain perdu à la vanille
url: http://www.marieclaire.fr/cuisine/pain-perdu-vanille,1196934.asp
created_at: 2018-03-14 09:58:55
updated_at: 2018-03-14 09:58:55
mimetype: text/html
language: fr
domain_name: www.marieclaire.fr
preview_picture: http://cache.marieclaire.fr/data/photo/w600_h315_ci/51/pain-perdu-vanille.jpg
http_status: 200
content:
  <div class="Article-recipeTitle">Infos pratiques</div>&#13;
  	<ul class="Article-recipeItems"><li class="Article-recipeItem"><label class="Article-recipeItemLabel">Nombre de personnes</label>4</li>
  		<li class="Article-recipeItem"><label class="Article-recipeItemLabel">Temps de préparation</label>10 minutes</li>
  		<li class="Article-recipeItem"><label class="Article-recipeItemLabel">Temps de cuisson</label>10 minutes</li>
  		<li class="Article-recipeItem"><label class="Article-recipeItemLabel">Temps de repos/attente</label>1 heure</li>
  		<li class="Article-recipeItem"><label class="Article-recipeItemLabel">Degré de difficulté</label>Facile</li>
  		<li class="Article-recipeItem"><label class="Article-recipeItemLabel">Coût</label>Bon marché</li>
  	</ul><div class="Article-text Article-recipeText">&#13;
  		<h3 class="Article-recipeTitle">Ingrédients</h3>&#13;
  <ul><li>4 tranches de pain de campagne rassis de 2 cm d’épaisseur </li>
  <li>50 cl de lait entier </li>
  <li>2 œufs </li>
  <li>150 g de sucre en poudre</li>
  <li>50 g de beurre</li>
  <li>1 gousse de vanille </li>
  <li>2 cuil. à soupe de rhum </li>
  <li>sucre glace pour le décor</li>
  </ul></div>&#13;
  	<div class="Article-text Article-recipeText">&#13;
  		<h3 class="Article-recipeTitle">Étapes</h3>&#13;
  <p>1. Fendez la gousse de vanille dans sa longueur, grattez les graines noires qu’elle contient au-dessus d’une casserole. Versez le lait, ajoutez la gousse et portez à ébullition. Laissez tiédir.</p>&#13;
  <p>2. Dans une jatte, battez à la fourchette les œufs, le sucre en poudre et le rhum. Versez le lait petit à petit (ôtez la gousse), toujours en remuant.</p>&#13;
  <p>3. Disposez les tranches de pain dans un grand plat creux, arrosez- les de la préparation au lait et laissez-les s’imprégner 1 h en les retournant une ou deux fois.</p>&#13;
  <p>4. Passé ce temps, égouttez les tranches de pain. Faites chauffer le beurre dans une grande poêle et mettez-y le pain à dorer pendant 3 à 4 min de chaque côté. Si votre poêle n’est pas assez grande, procédez en deux fois.</p>&#13;
  <p>5. Égouttez les tranches de pain dorées, répartissez dans des assiettes à dessert, saupoudrez de sucre glace et servez aussitôt.</p>	</div>&#13;
  	<div class="Article-text Article-recipeText">&#13;
  Recette parue dans le numéro 142	</div>&#13;
  	<div class="Article-text Article-recipeText">&#13;
  		<h3 class="Article-recipeTitle">Le bon accord vin</h3>&#13;
  <p>Type de vin : Vin liquoreuxCouleur du vin : blancAppellation : un pacherenc-du-vic-bilhRégion : Sud-Ouest</p>	</div>&#13;
  	<div class="Article-text Article-recipeText">&#13;
  		<h3 class="Article-recipeTitle">Conseils</h3>&#13;
  <p>Vous pouvez servir le pain perdu avec de la glace à la vanille, <a href="http://www.marieclaire.fr/cuisine/sauce-au-chocolat,1196890.asp" title="Sauce au chocolat Cuisine et Vins de France" class="internal">une sauce au chocolat</a> ou un <a href="http://www.marieclaire.fr/cuisine/blanc-manger-et-coulis-de-fruits-rouges,1194430.asp" title="Blanc-manger et coulis de fruits rouges" class="internal">coulis de fruits rouges</a>.</p>


  <div class="List List--articles List--light Article-text-contextualLinks">&#13;

  <div class="Title Title--aside List-title">Lire aussi</div>

  	&#13;
  </div>&#13;


  	</div>&#13;
  	<a class="Article-print" href="http://www.marieclaire.fr/print/article/1196934" target="_blank" rel="nofollow">&#13;
  		&#13;
  			Imprimer la recette&#13;
  		&#13;
  	</a>&#13;
  &#13;


title: 5 podcasts sur la sexualité et la séduction
url: http://www.madmoizelle.com/podcast-sexe-amour-2-897455/amp?__twitter_impression=true
created_at: 2018-03-14 19:51:14
updated_at: 2018-03-14 19:51:14
mimetype: text/html
language: fr-FR
domain_name: www.madmoizelle.com
http_status: 200
content:
  <div class="amp-wp-article-excerpt">
          
              <p>Les podcasts parlent aussi de sexe, d’amour, de couple, de drague et autres merveilles ! Camille vous en a sélectionné 5, alors abonnez-vous !</p>
          
      </div><div class="amp-wp-article-content">
                                      
                          <p><a href="http://www.madmoizelle.com/abonnement-podcast-explication-771509">Écouter des podcasts</a> qui parlent de cul, c’est comme <a href="http://www.madmoizelle.com/rubriques/sexe/ma-derniere-fois">regarder par le petit trou de la serrure</a>. Mais avec l’oreille.</p>
  <p>Ça permet de rentrer dans l’intimité de ceux et celles qui acceptent de la raconter au micro. Ça apporte aussi <strong>des réponses aux questions que l’on se pose au fond de son lit, sans oser les poser.</strong></p>
  <p>Voilà 5 podcasts sur l’amour et le sexe, plus un bonus en anglais (je suis comme ça), à écouter pour s’informer, se décomplexer, se marrer…</p>
  <p>Et kiffer !</p>
  <h3><em>Digital Love</em>, le podcast de Radio Nova sur l’amour et les <em>millennials</em></h3>
  <p>Nos petits coeurs s’emballent dans cet océan de<em> love</em> numérique ! À l’ère des réseaux sociaux et des applis de rencontres,<strong> ça se passe comment une rencontre, la séduction, le premier rendez-vous…?</strong></p>
  <p>C’est Colas, 27 ans, qui s’y colle pour cette première série de 5 épisodes et raconte <a href="http://www.madmoizelle.com/cybersex-faire-lamour-a-distance-896365">« <em>l’intime numérique</em> »</a> des <em>digital natives. </em></p>
  <p>En cinq courtes histoires, il partage <strong>ses expériences amoureuses, de ses flirts sur <a href="http://www.madmoizelle.com/snapchat-technique-ancienne-version-886087">Snapchat</a> à ses 347 matchs <a href="http://www.madmoizelle.com/meilleur-moment-tinder-697475">Tinder</a>. </strong></p>
  <p>Dans la suite de ces témoignages mêlant amour et Internet, le micro devrait être confié à une femme.</p>
  <p><em>Digital Love</em> est à retrouver sur <a href="http://www.nova.fr/radionova/digital-love" target="_blank">le site</a> et l’appli de Nova, Deezer et les applications de podcasts sur smartphone.</p>
  <h3><em>Sex and Sounds</em>, le podcast de Maïa Mazaurette</h3>
  <p>Quand <a href="http://www.madmoizelle.com/author/maia-mazaurette">Maïa Mazaurette</a> n’écrit pas sur le sexe, elle en parle.</p>
  <p>L’auteure du blog <em>Sexactu</em> est <strong>une plume prolifique qui mêle profondeur, humour et simplicité</strong> dès qu’il s’agit de décrypter les croyances et les tendances autour de la Chose.</p>
  <p>Dans ce podcast produit par <a href="https://www.arteradio.com/serie/sex_and_sounds" target="_blank">Arte Radio</a>, elle décline depuis octobre 2017 des thèmes variés, comme par exemple <a href="http://www.madmoizelle.com/premiere-fois-ca-fait-mal-890229">la douleur dans le sexe</a>, toujours à travers le prisme du son. <strong>Ça chatouille la culotte et les oreilles !</strong></p>
  <h3>Dans<em> Serial Dragueur</em>, Anouk Perry interroge son pote le plus séducteur</h3>
  <p>Ancienne rédactrice sexo et <em>feel good</em> sur madmoiZelle.com, <a href="http://www.madmoizelle.com/anouk-perry-podcast-889027">Anouk Perry s’est lancée dans les podcasts</a> pour le plus grand bonheur des Internets.</p>
  <p>Dans <em>Serial Dragueur</em>, elle nous présente Florian, son pote qui, mine de rien,<strong> couche avec cinq à dix filles différentes par mois.</strong></p>
  <p>Quelles sont ses techniques de drague ? Comment s’organise-t-il ? Que fait-il des objets et vêtements que les meufs oublient chez lui ? Vous le saurez en écoutant cette série de 5 épisodes <a href="http://www.madmoizelle.com/films-envie-sexe-702125">qui donne envie de pécho</a>.</p>
  <h3><em>Femme Actuelle</em>, les aventures sexuelles de Zoé sur Arte Radio</h3>
  <p>Zoé a trente ans et pas de tabous. Elle « <em>aime parler de sexe et le pratiquer</em> », et son planning de baise est bien rempli.</p>
  <p>Elle explore en douze épisodes ses expérimentations sexuelles, depuis l’enfance, de son éducation sexuelle libérée à sa première fois, <strong>jusqu’à un épisode final plus romantique que prévu.</strong></p>
  <p>À écouter sur Arte Radio.</p>
  <h3><em>Le Cabinet de Curiosité Féminine</em>, le podcast sexe pour s’informer</h3>
  <p>Pour le créatrices du <em>CCF</em>, la journaliste Camille Emmanuelle et la sexologue Alexia Bacouël :</p>
  <blockquote><p>« Le sexe est un sujet sérieux qu’il faut traiter avec légèreté. Et inversement. »</p></blockquote>
  <p>Une fois par mois, des experts du cul en tous genres se réunissent et approfondissent un sujet pendant 1h30, que ce soit<strong> casser le mythe « clitoridienne VS vaginale » ou faire le point sur le sexe dans les séries télé.</strong></p>
  <p>Le <em>CCF</em> organise aussi régulièrement des ateliers, des ciné-débats et proposent des consultations avec ses sexologues.</p>
  <p>Les podcasts sont à retrouver sur <a href="https://cabinetsdecuriosites.fr/category/podcasts-des-emissions/" target="_blank">le site du Cabinet de Curiosités</a>.</p>
  <h3><em>Swipe Out</em>, le podcast des <em>first dates</em> (<em>in English</em>)</h3>
  <p>Un petit bonus pour celles qui pigent l’anglais !</p>
  <p>Il existe moult podcasts anglo-saxons sur la sexualité. J’ai retenu <em>Swipe Out</em> parce que son concept me fait marrer et <a href="http://www.madmoizelle.com/femme-celibataire-positive-852613">me touche au plus profond de mon célibat</a>.</p>
  <p>Alix McAlpine est auteure. Dans le premier épisode de <em>Swipe Out</em>, elle raconte <strong>pourquoi elle a décidé de se rendre à 34 premiers rendez-vous</strong> l’année de ses 34 ans.</p>
  <p>Chaque épisode porte le nom de l’homme qu’elle a rencontré et Alix y débriefe le rendez-vous avec des amis en couple.</p>
  <p>Il n’y en a finalement que 17 épisodes à cette première (et unique) saison. Alix aurait-elle trouvé l’amour en cours d’expérience ? Suspenseeeee.</p>
  <p>Ça s’écoute <a href="https://swipeout.libsyn.com/" target="_blank">ici</a>.</p>
  <p><strong>Et vous, vous aimez écouter quel genre d’histoires sur l’amour et le sexe ? Vous êtes plutôt témoignage ou avis d’experts ? </strong></p>
  <p class="alire"><strong>À lire aussi : </strong><a href="http://www.madmoizelle.com/ctrlx-podcast-erotique-887525">CtrlX, le podcast érotique pour s’exciter en audio</a></p>
      </div>


created_at: 2018-03-15 09:46:31
updated_at: 2018-03-15 09:46:31
mimetype: text/html
language: fr
domain_name: www.trucsetbricolages.com
preview_picture: https://trucsetbricolages.fw.cdnpull.com/og_resized_1200x630_590b18d4be40f_189121.jpg
http_status: 200
title:
  Avec ces 12 trucs de photographe, soyez toujours à votre meilleur en évitant les erreurs de posture!

url:
  https://www.trucsetbricolages.com/trucs-et-astuces/avec-ces-12-trucs-de-photographe-soyez-toujours-a-votre-meilleur-en-evitant-les-erreurs-de-posture

content:
  <p>Chaque fois que vous regardez des photos de vous, vous n’aimez jamais ce que vous dégagez? Choisir une photo de profil avantageuse pour Facebook ou Linkedln est un vrai casse-tête? Vous pensez que vous n’êtes simplement pas photogénique?</p><p><strong>Vous faites erreur! Tout est une question d’angle de prise de vue et de position du corps quand la photo est prise</strong>.&#13;
    </p><p>Voici justement 12 erreurs courantes et leurs solutions.&#13;
    </p><p><strong>Le cou doit être visible sur une photo</strong> : évitez de baisser la tête sinon votre regard en souffrira. Relevez la tête, même si ça vous semble non naturel comme pose : en relevant la tête, on verra votre cou, ce qui confère de l’élégance et une apparence de minceur aux photos.&#13;
    </p><p><strong>Les bras croisés donnent une apparence de lourdeur</strong> que vous souhaitez éviter dans vos photos. Quand vous regardez la photo, votre corps doit être légèrement de côté, avec les bras écartés du corps. Cette position amincit en définissant les contours et les courbes.&#13;
    </p><p><strong>Une mauvaise position assise raccourcit le cou et ajoute du poids à la taille!</strong> En prenant la pose assise, tournez votre corps en penchant légèrement les épaules vers l’avant et en gardant le dos droit, sans vous accoter sur le dossier.&#13;
    </p><p><strong>Si vous êtes assis bien droit face à la caméra, votre silhouette aura l’air massive et carrée</strong>. Un mauvais angle fera paraître vos bras et vos jambes plus courts qu’ils le sont. La solution est de tourner un peu votre corps dans le sens contraire de la caméra, en plaçant une jambe légèrement au-dessus de l’autre pour donner un effet de longueur.&#13;
    </p><p><strong>Toujours dans la position assise, l’épaule extérieure doit revenir un peu vers l’intérieur</strong>, sans trop pencher par l’avant, pour casser l’effet carré et artificiel. La position idéale est d’être tourné aux ¾ vers la caméra en éloignant les bras du corps : votre taille aura l’air plus définie et fine.&#13;
    </p><p>Quand on pose assis, on se demande quoi faire de nos mains et de nos bras : les bras croisés sont à éviter, alors que les bras le long du corps n’auront pas l’air naturels. <strong>Quand vous posez assis, pensez à un sablier</strong> : avec une jambe croisée et les coudes appuyés sur la jambe la plus élevée, gardez un bras à la verticale et l’autre à l’horizontale. Cette position mettra votre visage et vos formes en valeur.&#13;
    </p><p><strong>Se tenir debout avec les bras ballants de chaque côté est à proscrire complètement!</strong> Vos vêtements manquent de reliefs, vos courbes sont cachées, votre corps a l’air d’un bloc! Alors que si vous éloignez vos bras de votre corps en créant des lignes et des angles, vous mettrez votre silhouette en valeur.&#13;
    </p><p><strong>En vous plaçant devant la caméra, offrez un demi-profil</strong>, en plaçant une main sur la hanche intérieure pour libérer l’espace autour de votre taille. Votre bras extérieur doit simplement suivre les courbes de votre corps, sans espace. &#13;
    </p><p><strong>Des vêtements trop amples alourdissent la silhouette</strong>. Pour contrebalancer cet effet de lourdeur, placez vos mains sur vos hanches, une main plus haute que l’autre, vers l’avant et en montrant vos poignets, &#13;
    </p><p><strong>Des coudes qui font face à la caméra donnent l’impression qu’ils sont plus courts qu’en réalité</strong>. De plus, la main sur le cou va à l'encontre des règles de proportion. Si vos bras sont visibles sur la photo, vos mains doivent être visibles aussi et doivent mettre en valeur vos traits. En bougeant le coude vers le côté ou le bas, votre silhouette sera mieux définie.&#13;
    </p><p><strong>Évitez de déposer votre main complète sur votre visage</strong> : non seulement vous cachez vos traits, mais en plus vous alourdissez l’impression générale de votre silhouette. Courbez légèrement votre main et déposez un doigt ou 2 sur le bas de votre visage, sans peser.&#13;
    </p><p><strong>Cette position est également à éviter complètement</strong>. Si vous voulez déposer votre menton sur votre main, laissez votre main ouverte en laissant un espace entre le menton et la main. </p>


title: [MàJ] Nextcloud 12/13 sur un mutualisé OVH
url: https://open-freax.fr/maj-nextcloud-12-sur-un-mutualise-ovh/
created_at: 2018-03-15 14:56:57
updated_at: 2018-03-15 14:56:57
mimetype: text/html
language: fr-FR
domain_name: open-freax.fr
http_status: 200
content:
  <p>Chose promise, chose due, il paraît, et pour Nextcloud je l’ai promise plusieurs fois cette chose. Après un bon moment de silence, la faute à pas mal de taf, à un déménagement, à une nouvelle vie qui commence… je vais reprendre si tout va bien un rythme de publication plus régulier.</p>

  <p>Et pour fêter ça, on va commencer par quelque chose de pas mal demandé par ici : une mise à jour du tutoriel d’installation de Nextcloud / ownCloud sur un hébergement mutualisé OVH. J’y fusionne les retours qui m’ont été faits dans les commentaires de l’ancien article, et d’autres infos plus ou moins liées (genre la synchro avec DAVdroid cassée, c’est pas un pré-requis pour que Nextcloud fonctionne, mais c’est quand même cool d’avoir la solution sous la main ! 😉 ). On ajoutera également une partie sur la synchro des tâches et notes. Allons-y !</p>
  <p>

  </p><h2>Pré-requis</h2>
  <p>Pas de changements majeurs dans les pré-requis, PHP 5.6+ est toujours supporté, même si PVH version 7.0 ou plus récent est recommandé. Pour ma part, j’ai fait l’installation test avec PHP 7.0. Si un changement de version se fait sans souci avant une installation propre (en repartant de zéro — ça fait du bien de temps en temps !), gardez en tête que se borner à changer la version de PHP dans votre fichier .ovhconfig ou via le Manager OVH peut précipiter le recours à l’installation propre parce que ça aurait tout pété. Pas mal de logiciels digèrent mal la chose, j’en ai fait l’expérience ici même (ouais, j’suis comme ça, j’ai pété Open-Freax en testant, heureusement il a suffi de rebasculer en PHP 5.6 pour réparer).</p>
  <p>Je vous conseille également d’utiliser MySQL et pas SQLite, si vous avez pas mal de fichiers et/ou de comptes, sinon, bonjour les dégâts et la base corrompue à mort (testé et désapprouvé). Au final, ma base ne prend pas énormément de place, pour un Nextcloud partagé avec madame, et avec pas mal d’applications.</p>
  <p>Notez qu’avec la v12 vient son lot de nouveautés : plus d’erreurs ou presque lors des mises à jour via l’interface web, et surtout Nextcloud ne désactive plus les applications tierces (ou les réactive ensuite) : plus besoin de réactiver à la main et une à une les applications « Contacts », « Agenda »… après chaque upgrade.</p>

  <p>Il vous faut donc simplement un client FTP(S de préférence) et <a href="https://nextcloud.com/install/" target="_blank" rel="noopener">l’archive d’installation officielle</a>. Il existe aussi un script PHP justement fait pour ne pas se cogner des centaines de fichiers à téléverser via FileZilla (par exemple), mais je ne l’ai pas testé avec Nextcloud (je suis passé de la v11 à la v12, puis de la v12 à la V13, sans installation fraîche).</p>

  <p>On va commencer par l’essentiel, le (sous-)domaine. Dans mon cas, plutôt que d’utiliser une URL de la forme https://mon-domaine.fr/nextcloud/, je préfère un sous-domaine, type https://nextcloud.mon-domaine.fr. C’est affaire de goût, principalement.<br />
  Pour le créer, direction le manager OVH, ajoutez votre sous-domaine en prenant bien soin de cocher que vous voulez y accéder en https, pour qu’il ajoute ce sous-domaine à la liste de ceux couverts par votre certificat TLS gratuit Let’s Encrypt. Ensuite, cliquez simplement sur le bouton pour régénérer votre certificat. Patientez quelques minutes (allez prendre un café, ça peut être un poil long), le temps que tout ça se fasse. Pendant ce temps-là, passez à l’étape 1 (du moins le début).</p>

  <h2>Étape 1 : installation de Nextcloud</h2>
  <p>Simplissime : téléversez l’archive extraite via FileZilla (par exemple). Une fois que le sous-domaine est bien créé et le certificat mis à jour, pointez votre navigateur web vers la page d’installation, et suivez les instructions. C’est tout bon ! Vous pouvez vous y connecter et activer d’autres applications fournies (Agenda, Contacts), tout ça tout ça.</p>
  <p>Mais si vous vous rendez dans la partie « Administration » de votre instance fraîchement installée, vous verrez une flopée d’erreurs. Notez que ça n’empêche pas Nextcloud de fonctionner, du moins pas totalement, mais ça peut vous poser souci dans certains cas d’usage, ou causer un risque d’un point de vue sécurité. On va y remédier.</p>

  <p><img class="aligncenter wp-image-2847 size-large" src="http://open-freax.fr/wp-content/uploads/2017/09/Capture-1024x329.png" alt="admin panel" width="768" height="247" /></p>

  <h2>Étape 2 : se débarrasser des erreurs</h2>
  <h3>Étape 2a : les headers</h3>
  <p>Pour cela, ouvrez le fichier .htaccess à la racine du répertoire contenant Nextcloud et repérez le pavé qui cause des headers.</p>
  <p>Modifiez chaque ligne commençant par <code class="codecolorer text default">Header set</code> en <code class="codecolorer text default">Header always set</code>, et ajoutez la ligne au bloc en question :</p>
  <p><code class="codecolorer text default">Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"</code></p>


  <h3>Étape 2b : activer le cache</h3>
  <p>Modifiez le fichier config/config.php et ajoutez la ligne :</p>
  <p><code class="codecolorer text default">'memcache.local' =&gt; '\\OC\\Memcache\\ArrayCache',</code></p>
  <p>Puis rechargez la page d’administration, et c’est tout bon. Une erreur de moins, qui peut également causer l’apparition d’un nouveau message comme quoi OPCache serait mal configuré. Je n’ai pas encore pris le temps de regarder ça.</p>

  <h3>Étape 2c : la vérification de code</h3>
  <p>Puisque nous avons modifié des fichiers propres à Nextcloud, et que depuis quelques temps maintenant un mécanisme vérifie que l’empreinte du fichier en place correspond bien à l’empreinte du fichier fourni par Nextcloud, il paraît logique que ce mécanisme puisse détecter nos modifications et nous en avertir (c’est le but, à la base). Deux options : vivre avec ce bandeau jaune (visible seulement par les administrateurs), ou désactiver la vérification (pas super recommandé, mais ça dépanne).</p>
  <p>Dans ce 2e cas, il vous faut ouvrir le fichier config/config.php et ajouter : <code class="codecolorer text default">'integrity.check.disabled' =&gt; true</code> puis relancer la vérification d’intégrité. Le message va disparaître.</p>

  <h3>Étapes restantes…</h3>
  <p>Restent 2 « soucis » : une erreur concernant la configuration de php-fpm, côté serveur donc, pour laquelle je ne sais pas s’il est possible de faire quelque chose sans passer par OVH. Enfin, l’espace disponible n’est pas renvoyé, même avec ma manip’ « habituelle » : il faut creuser là-dessus ! Rien de bloquant pour le moment, sauf certaines extensions comme celle pour les « gros fichiers » de Thunderbird qui vérifient l’espace disponible… et illimité ne lui convient pas 😛</p>


  <h2>Étape 3 : installer le client sans péter sa synchro</h2>
  <p>Ça parait couillon dit comme ça, hein. Et pourtant…</p>
  <p>Techniquement, l’équipe de développement de Nextcloud (un héritage d’ownCloud, techniquement) a décidé que les gros fichiers devaient être découpés en morceaux de 10Mo. Ça se défend, je ne le remet pas en cause. Simplement, sur nos connexion ADSL classiques, ça prend un peu de temps à envoyer, des bouts de 10Mo. Conséquence : le serveur MySQL d’OVH, qui attend les infos sur le fichier tout au long du process, finit par se lasser et fermer la connexion… entraînant l’arrêt de la synchronisation dudit fichier, et une erreur type « MySQL has gone away ». Encore une fois, « on y travaille »… ou pas ? Depuis le temps (genre été 2015), ce n’est pas résolu…</p>
  <p>J’ai donc décidé, pour régler le problème côté client, de découper mes « gros » fichiers en morceaux de 1Mo. Plus petit, donc plus rapide à envoyer, donc de multiples connexions à MySQL mais d’une durée plus courte. Et ça passe.</p>

  <p>Pour ça c’est simple, il faut modifier le fichier de configuration du client. Déjà, installez-le en suivant <a href="https://nextcloud.com/install/#install-clients" target="_blank" rel="noopener">les instructions officielles</a>, connectez-vous, puis fermez le client.</p>
  <p>Il faut ensuite ajouter la ligne <code class="codecolorer text default">chunkSize=1000000</code> sous la section [General] du fichier de configuration ($HOME/.local/share/data/Nextcloud/nextcloud.cfg sous Linux).</p>
  <p>Il existe aussi une autre façon de faire, qui permet d’étendre le changement à tout le système, utile si c’est l’ordinateur familial avec 5 utilisateurs. Pour ça, sous Linux, c’est simple, ajoutez à vos variables d’environnement la suivante : <code class="codecolorer text default">export OWNCLOUD_CHUNK_SIZE=1000000</code> . Concrètement, vous pouvez soit l’ajouter à votre propre fichier .profile (situé à la racine de votre dossier personnel, ce qui n’affectera que votre utilisateur), soit la propager à tout le système en l’ajoutant au fichier /etc/profile (il vous faudra les droits superutilisateur, dans ce cas).</p>
  <p>Pour OS X: c’est la même commande que celle indiquée ci-dessus, puis vérifier dans le fichier de log situé dans: « /Applications/nextcloud.app/Contents/MacOS/nextcloud »</p>
  <p>Sous Windows : Panneau de configuration &gt; Système &gt; Paramètres système avancés, puis créer une nouvelle variable soit pour l’utilisateur en cours, soit pour l’entièreté du système :</p>
  <ul><li>Nom de la variable: OWNCLOUD_CHUNK_SIZE</li>
  <li>Valeur de la variable: 1000000</li>
  </ul>

  <h2>Étape 4 : installer/configurer les différentes synchronisations avec Nextcloud sous Android</h2>
  <p>On va traiter plusieurs choses ici : le client pour les fichiers (qui nous servira également à téléverser automagiquement nos photos, comme le fait Google avec son propre service, sauf que là ça reste chez nous), un client contacts/agenda qui nous permettra de stocker nos contacts et RDV ailleurs que sur un compte Google, un client de synchronisation des tâches et enfin un client pour les notes (façon Google Keep, si on veut et si ça existe encore).</p>

  <h3>Étape 4a : installer les clients</h3>
  <p>Plusieurs options s’offrent à vous : passer par le Google Play Store ou par le dépôt de logiciels libres F-Droid. Nextcloud a fait un choix différent d’ownCloud, et bienvenu : l’application officielle est gratuite sur le Play Store (ownCloud vous facture la sienne 0,79€, ce n’est pas excessif mais c’est un choix discutable). Si vous souhaitez passer par F-Droid, la procédure est simple : dans les paramètres de sécurité du téléphone, activez temporairement l’installation d’applications provenant de sources inconnues (au sens de Google, « inconnue » signifie hors Play Store… ce n’est pas forcément dangereux), rendez-vous via le téléphone sur <a href="https://f-droid.org/FDroid.apk" target="_blank" rel="noopener">f-droid.org</a> fpour télécharger le fichier APK d’installation. Installez-le. C’est fait !</p>
  <p>Petit récapitulatif des logiciels que je vais utiliser ici :</p>
  <table><tbody><tr><td><strong>Synchro de…</strong></td>
  <td><strong>Client</strong></td>
  <td><strong>Licence</strong></td>
  <td><strong>Play Store</strong></td>
  <td><strong>F-Droid</strong></td>
  </tr><tr><td>Fichiers/photos</td>
  <td>Nextcloud</td>
  <td>GPL v2.0</td>
  <td><a href="https://play.google.com/store/apps/details?id=com.nextcloud.client&amp;hl=fr" target="_blank" rel="noopener">Télécharger</a> (gratuit)</td>
  <td><a href="https://f-droid.org/packages/com.nextcloud.client/" target="_blank" rel="noopener">Télécharger</a></td>
  </tr><tr><td>Contacts/agenda</td>
  <td>DAVdroid</td>
  <td>GPL v3.0</td>
  <td><a href="https://play.google.com/store/apps/details?id=at.bitfire.davdroid&amp;hl=fr" target="_blank" rel="noopener">Télécharger</a> (3,99€)</td>
  <td><a href="https://f-droid.org/packages/at.bitfire.davdroid/" target="_blank" rel="noopener">Télécharger</a></td>
  </tr><tr><td>Tâches</td>
  <td>OpenTasks</td>
  <td>Apache 2.0</td>
  <td><a href="https://play.google.com/store/apps/details?id=org.dmfs.tasks&amp;hl=fr" target="_blank" rel="noopener">Télécharger</a> (gratuit)</td>
  <td><a href="https://f-droid.org/packages/org.dmfs.tasks/" target="_blank" rel="noopener">Télécharger</a></td>
  </tr><tr><td>Notes</td>
  <td>Nextcloud Notes</td>
  <td>GPL v3.0+</td>
  <td><a href="https://play.google.com/store/apps/details?id=it.niedermann.owncloud.notes&amp;hl=fr" target="_blank" rel="noopener">Télécharger</a> (2,99€)</td>
  <td><a href="https://f-droid.org/packages/it.niedermann.owncloud.notes/" target="_blank" rel="noopener">Télécharger</a></td>
  </tr><tr><td>Favoris</td>
  <td>Nextcloud Bookmarks</td>
  <td>MIT</td>
  <td> <a href="https://play.google.com/store/apps/details?id=org.schabi.nxbookmarks&amp;hl=fr" target="_blank" rel="noopener">Télécharger</a> (0,79€)</td>
  <td><a href="https://f-droid.org/packages/org.schabi.nxbookmarks/" target="_blank" rel="noopener">Télécharger</a></td>
  </tr></tbody></table>
  <p>Alors, je ne dis pas que ce sont les meilleurs, ou les seuls, simplement ils répondent à mes critères : simples à utiliser, savent se faire oublier (genre la sauvegarde automatique des photos prises, ou même DAVdroid qui une fois configurer ne demande plus rien et fait son job), gratuits (sur F-Droid du moins, et de toutes façons je n’ai pas les services Google Play sur mon smartphone), et surtout libres.</p>
  <p>Mais libre à vous d’utiliser autre chose et, pourquoi pas, de me suggérer des outils dans les commentaires : je suis toujours preneur d’infos ! 😀</p>

  <p>Certaines de ces applications sont à ajouter à la main côté serveur évidemment. Au pire, il vous suffit de vous rendre sur <a href="https://apps.nextcloud.com/" target="_blank" rel="noopener">Nextcloud Apps</a>, de prendre le fichier zip qui correspond à votre version de Nextcloud (a priori, la 12 😉 ) et de le décompresser dans le dossier apps/ de votre instance, toujours via votre client FTP(S), ou même via l’interface web (net2ftp) proposée par OVH. Ensuite, il suffit de les activer dans le menu « Applications » !</p>

  <h3>Étape 4b : activer l’authentification à 2 facteurs pour Nextcloud</h3>
  <p>C’est facultatif, bien évidemment, MAIS je le recommande très fortement. Concrètement, vous ajoutez une couche de protection à votre instance : lors de votre connexion, Nextcloud vous demandera un code en plus de votre mot de passe, et vous devrez utiliser votre smartphone pour l’obtenir (ou un des codes de secours sur papier, au pire).</p>
  <p>C’est ce qu’on appelle l’authentification forte : vous cumulez 2 facteurs d’authentification (« ce que vous savez » : le mot de passe de votre compte, et « ce que vous possédez » : votre smartphone. En théorie, vous êtes le seul à pouvoir réunir ces deux éléments).</p>
  <p>Vous avez pour cela besoin de deux éléments :</p>
  <ul><li>installer l’application « Two Factor TOTP Provider » côté serveur (<a href="https://apps.nextcloud.com/apps/twofactor_totp" target="_blank" rel="noopener">la télécharger</a>)et l’activer ;</li>
  <li>installer et configurer une application permettant de générer les codes sur votre téléphone. Beaucoup de gens utilisent <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&amp;hl=fr" target="_blank" rel="noopener">Google Authenticator</a>, mais je vous recommande quelque chose de plus sérieux comme <a href="https://f-droid.org/packages/com.onest8.onetimepad/" target="_blank" rel="noopener">OneTimePad</a>. Il stocke les secrets permettant de générer des codes de manière sécurisée, c’est un atout indéniable, et il est libre, sous licence MIT (le code de Google Authenticator a été refermé il y a quelques années, alors qu’il était initialement ouvert). Bref, choisissez un outil qiu vous convient, tant qu’il respecte la RFC 6238 qui décrit l’implémentation de TOTP.</li>
  </ul>
  <p>Une fois que tout cela est fait, il vous suffit de vous rendre sur la page « Personnel » (via le menu en haut à droite), d’activer TOTP, et de générer des codes de secours. Vous aurez un QRCode à « scanner » dans l’application mobile, pour permettre la génération de codes. C’est pas plus compliqué que ça !</p>

  <p><img class="aligncenter wp-image-2850 size-full" src="http://open-freax.fr/wp-content/uploads/2017/09/totp1.png" alt="TOTP" width="755" height="285" /></p>

  <table><tbody><tr><td> </td><td align="justify"><strong>Attention !</strong>
  <p>Si vous avez activé l’authentification 2 facteurs, vous ne pourrez pas connecter les clients comme DAVdroid avec votre mot de passe habituel. Il faut leur attribuer un « passe-droits » qui les dispensera de fournir un code TOTP. Pour cela, direction la page « Personnel » section « Sécurité » où vous pourrez générer des « mots de passe d’application » (1 par application, sans accès aux fichiers si elles n’en ont pas besoin). C’est ce mot de passe que vous fournirez associé à votre login lors de la connexion de vos clients.</p></td></tr></tbody></table>
  <h3>Étape 4c : configurer l’application officielle</h3>
  <p>Rien de bien compliqué : au lancement, il faut simplement remplir 3 champs : l’adresse URL de votre serveur, votre login, et votre mot de passe (en cas d’OTP, voir juste au-dessus).</p>
  <p>Et c’est parti.</p>

  <p>Pour ajouter la fonctionnalité « InstantUpload » allez dans les paramètres, puis « Téléversement automatique ». Les dossiers contenant des photos apparaissent, et vous pouvez pour ceux de votre choix tapoter le petit nuage, qui virera au bleu : les nouvelles photos seront envoyées directement dans votre cloud. Il y a également davantage d’options, comme l’emplacement de stockage, le téléversement par Wi-Fi uniquement, ce genre de choses.</p>

  <h3>Étape 4d : configurer DAVdroid (et le reste)</h3>
  <p>Alors là c’est la magie. Il vous suffit d’ouvrir l’application Nextcloud officielle, d’aller dans les paramètres, et y’a un bouton… « Configurer DAVdroid pour le compte actuel ». 😀</p>
  <p>Cela va ouvrir DAVdroid avec tout pré-remplir, sauf votre mot de passe évidemment. Il ne vous reste plus qu’à le saisir et vous connecter.</p>

  <p>Si pour une raison X ou Y cela ne fonctionne pas, remplacez l’URL fournie par celle accessible dans l’agenda ( <strong>https://nextcloud.mon-domaine.fr/remote.php/dav/principals/users/mon_login</strong> ). Il trouvera quand même les contacts, rassurez-vous !</p>

  <table><tbody><tr><td> </td><td><strong>Attention !</strong>
  <p>Il y a une subtilité avec la synchronisation pour DAVdroid et OpenTasks : leurs user-agents posent souci et la synchronisation ne se fait pas. C’est un demi-souci puisque pour régler ça, il suffit d’éditer un fichier (comme au début un peu) : il s’agit de &lt;chemin de nextcloud&gt;/lib/base.php .</p>
  <p>En ligne 534 (du moins chez moi), vous avez une liste d’User-Agents « incompatibles » : ajoutez-y DAVdroid et OpenTasks comme présenté <a href="https://paste.open-freax.fr/?be975fd4043ca4bc#U2hv3zEQTXVjzwp4ugCaAcveFkZHX393a7kk1/E2kdg=" target="_blank" rel="noopener">sur ce paste</a>. Pour mémoire :</p>
  <ul><li>pour DAVdroid c’est <code class="codecolorer text default">'/^DAVdroid/'</code></li>
  <li>pour OpenTasks c’est <code class="codecolorer text default">'/^CalDAV-Sync/'</code></li>
  </ul><p></p></td></tr></tbody></table>
  <p><img class="aligncenter size-full wp-image-2860" src="http://open-freax.fr/wp-content/uploads/2017/09/Screenshot_20170912-094524.png" alt="nextcloud bookmarks app" width="350" height="622" /></p>

  <h2>Bonus : mot de passe de mise à jour</h2>
  <p>Lorsque vous utilisez l’outil de mise à jour intégré, via l’interface web, il est fort probable qu’il vous demande un mot de passe. Qui n’est pas le votre. Il demande la version en clair de ce qui correspond à <code class="codecolorer text default">updater.secret</code> contenu dans votre fichier de configuration serveur. Et évidemment, puisque c’est un hash, ce n’est pas réversible.</p>
  <p>La seule solution est donc de générer un nouveau updater.secret et de le remplacer dans config.php, en notant au passage la valeur en clair ! 🙂</p>
  <p>Pour ce faire, créez un fichier PHP vierge quelque part sur votre mutu, et placez-y le contenu suivant :</p>
  <p><code class="codecolorer text default">&lt;?php $password = trim(shell_exec("openssl rand -base64 48"));if(strlen($password) === 64) {$hash = password_hash($password, PASSWORD_DEFAULT) . "\n"; echo "Insert as updater.secret: ".$hash; echo "The plaintext value is: ".$password."\n";}else{echo "Could not execute OpenSSL.\n";}; ?&gt;</code></p>
  <p>Accédez à ce fichier depuis votre navigateur, notez les deux valeurs renvoyées, et c’est tout bon, vous pourrez mettre à jour après remplacement du hash et validation de sa valeur en clair !</p>

  <table><tbody><tr><td> </td><td>Si malgré tout cela ne fonctionne toujours pas, j’ai une solution de contournement à proposer, certes pas optimale, mais efficace.
  <p>Après des recherches, il semble que le serveur Apache chez OVH n’honore pas la CSP (<em>Content Security Policy</em>) intégrée à Nextcloud, et conserve la sienne, visiblement trop restrictive. Après moult essais, voici une CSP permettant à votre navigateur d’exécuter le script qui indique à l’Updater que vous êtes connecté, et administrateur de la plateforme. Si cette CSP est absente, l’information « cet utilisateur est connecté en tant qu’administrateur et peut donc procéder à la mise à jour » n’arrive pas à l’Updater, ce qui déclenche l’apparition de ce joli message parlant d’updater.secret.</p>
  <p>Bref, trêve de babillages, action. Ouvrez votre .htaccess et dans le bloc des headers ajoutez :</p>
  <p><code class="codecolorer text default">Header always set Content-Security-Policy "script-src 'self' 'unsafe-eval' 'unsafe-inline';"</code></p>
  <p>Cette CSP est très (trop) permissive, et je vous conseille de commenter la ligne en question entre deux mises à jour. M’enfin, faute de mieux… Qui sait, ça résoudra peut-être d’autres de vos problèmes !</p>
  <p></p></td></tr></tbody></table>

  <p>Comme d’habitude, si vous avez des questions, besoin de compléments, un souci… N’hésitez pas, les commentaires sont là pour ça !</p>
  <div class="SPOSTARBUST-Related-Posts"><h3>Ces articles peuvent également vous intéresser :</h3><ul class="entry-meta"><li class="SPOSTARBUST-Related-Post"><a title="[Tuto] ownCloud 9 / 9.1 / NextCloud 10 sur un mutualisé OVH" href="https://open-freax.fr/owncloud-9-mutualise-ovh/" rel="bookmark">[Tuto] ownCloud 9 / 9.1 / NextCloud 10 sur un mutualisé OVH</a></li>
  <li class="SPOSTARBUST-Related-Post"><a title="[Tuto] ownCloud 7 / 8 sur un mutualisé OVH" href="https://open-freax.fr/owncloud-7-mutu-ovh/" rel="bookmark">[Tuto] ownCloud 7 / 8 sur un mutualisé OVH</a></li>
  <li class="SPOSTARBUST-Related-Post"><a title="[Tuto] ownCloud 6 sur un mutualisé OVH" href="https://open-freax.fr/owncloud-6-mutu-ovh/" rel="bookmark">[Tuto] ownCloud 6 sur un mutualisé OVH</a></li>
  <li class="SPOSTARBUST-Related-Post"><a title="[Tuto] ownCloud v5 sur un mutu OVH" href="https://open-freax.fr/owncloud-v5-mutu-ovh/" rel="bookmark">[Tuto] ownCloud v5 sur un mutu OVH</a></li>
  <li class="SPOSTARBUST-Related-Post"><a title="[Tuto] ownCloud sur un mutualisé OVH" href="https://open-freax.fr/owncloud-mutu-ovh/" rel="bookmark">[Tuto] ownCloud sur un mutualisé OVH</a></li>
  </ul></div>


title: Good to great UI animation tips – UX Collective
url: https://uxdesign.cc/good-to-great-ui-animation-tips-7850805c12e5?gi=fd5c36906b14
created_at: 2018-03-16 15:25:14
updated_at: 2018-03-16 15:25:14
mimetype: text/html
domain_name: uxdesign.cc
preview_picture: https://cdn-images-1.medium.com/max/1200/1*x8wGMNfuh1e5Ew6k0aF_iQ.png
http_status: 200
content:
  <div class="section-content"><div class="section-inner sectionLayout--insetColumn"><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*x8wGMNfuh1e5Ew6k0aF_iQ.png" alt="image" /></div><p class="graf graf--p graf-after--h4">Let’s see some examples of UI animations going from good to great. With a little bit of tweaking here and there, you can elevate your UI patterns with animation.</p><p class="graf graf--p graf-after--p">The interactions listed show continuity between states, denote a relationship between shared elements, and call the user’s attention to something they should notice and act upon.</p><p class="graf graf--p graf-after--p">To create these animations, I followed the guidelines from <a href="https://material.io/guidelines/motion/material-motion.html" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Material Motion</a>, <a href="https://www.ibm.com/design/language/experience/animation" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">IBM’s Animation Principles</a>, and <a href="https://medium.com/ux-in-motion/creating-usability-with-motion-the-ux-in-motion-manifesto-a87a4584ddc" class="markup--anchor markup--p-anchor" target="_blank">The UX in Motion Manifesto.</a></p><p class="graf graf--p graf-after--p graf--trailing">All of the interactions were made using the early-access version of <a href="https://www.invisionapp.com/studio" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">InVision Studio</a>. You can download the <a href="https://www.dropbox.com/sh/qfwficfun4vagv6/AAADpQyoZ5y_o8KnCnxOSqiUa?dl=0" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">source files here.</a></p></div></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 id="c1fe" class="graf graf--h3 graf--leading">Make the content in tabs slide.</h3><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*svOSIbKYLf2ELQ8Yz2CkRw.gif" alt="image" /></div>The content on the left fades in and out. The one on the right slides with the tabs.<ul class="postList"><li class="graf graf--li graf-after--figure">A good animation fades the content in and out from one state to another.</li><li class="graf graf--li graf-after--li">A great animation shows continuity in a transition by making the content move between states.</li></ul><p id="a444" class="graf graf--p graf-after--li graf--trailing">When you design an interaction like a tab or a fly-out menu, try putting the position of the content relative to the action that opens it. This way you can animate not only the visibility of the content but the position too. Oh, and while you’re at it, add a swipe gesture that takes you from one piece of content to the other.</p></div></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 id="c9c4" class="graf graf--h3 graf--leading">Connect the shared elements of a card.</h3><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*EnfbAvsPg7d1OTorXugvmQ.gif" alt="image" /></div>The content on the left opens a new screen that slides up. The card on the right expands and fills the screen.<ul class="postList"><li class="graf graf--li graf-after--figure">A good animation uses transitions like push left or slide up to show the content on a detail screen.</li><li id="b5d7" class="graf graf--li graf-after--li">A great animation establishes a connection between two states by animating the shared content.</li></ul><p class="graf graf--p graf-after--li">When animating between different states, see if there are any shared elements between them and connect them. With InVision Studio, components that are repeated between two linked screens are automatically connected when you create a <em class="markup--em markup--p-em">Motion</em> transition. This makes prototyping animations a breeze.</p><p class="graf graf--p graf-after--p graf--trailing">Check out the <a href="https://medium.com/ux-in-motion/creating-usability-with-motion-the-ux-in-motion-manifesto-a87a4584ddc" class="markup--anchor markup--p-anchor" target="_blank">Motion Manifesto</a> to see the types of animations you can apply. The example above uses a combination of the <em class="markup--em markup--p-em">Masking</em>, <em class="markup--em markup--p-em">Transformation</em>, <em class="markup--em markup--p-em">Parenting</em>, and <em class="markup--em markup--p-em">Easing</em> principles.</p></div></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 class="graf graf--h3 graf--leading">Use a cascading effect in your content.</h3><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*BMLGrW3NJukwOt6p7b31Rw.gif" alt="image" /></div>The cards on the left appear by sliding and fading in. The ones on the right feature the same animation, but each card has a short delay.<ul class="postList"><li id="b506" class="graf graf--li graf-after--figure">A good animation changes the position and opacity of the material when it enters the screen.</li><li class="graf graf--li graf-after--li">A great animation quickly staggers the appearance of each group or element.</li></ul><p class="graf graf--p graf-after--li graf--trailing">To accomplish the <em class="markup--em markup--p-em">waterfall effect</em>, try applying delays to each piece or group of content. Keep the same easing and duration, so it feels consistent. Don’t cascade each little element, though—animate the groups of content. Keep the animation quick and snappy. Google recommends beginning each element no more than 20ms apart. Check out the <a href="https://material.io/guidelines/motion/choreography.html#choreography-creation" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">choreography principle in Material Motion </a>to see more examples.</p></div></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 id="fc61" class="graf graf--h3 graf--leading">Make the content push other elements out of the way.</h3><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*ZK3EUKNZBmfZ1OFwzaBzEA.gif" alt="image" /></div>The animation on the left animates on top of the other content. The animation on the right pushes the content out as it grows.<ul class="postList"><li id="b4f9" class="graf graf--li graf-after--figure">Good animations move and show elements in context.</li><li id="ce12" class="graf graf--li graf-after--li">Great animations show elements affecting their surroundings when they change.</li></ul><p class="graf graf--p graf-after--li graf--trailing">Make the elements in your content aware of their surroundings. This means making the content attract or repel the elements around it. For more examples check out the <em class="markup--em markup--p-em">Aware</em> motion principle from <a href="https://material.io/guidelines/motion/material-motion.html#material-motion-how-does-material-move" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Material Design.</a></p></div></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 id="cd4b" class="graf graf--h3 graf--leading">Make menus appear in context.</h3><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*z9stGQZuCsTVhnlcu7deow.gif" alt="image" /></div>The menu on the left flies in from below. The menu on the right expands from the action that created it.<ul class="postList"><li id="ab8f" class="graf graf--li graf-after--figure">Good animated menus show the content appearing from the direction of the button that opened them.</li><li class="graf graf--li graf-after--li graf--trailing">Great animated menus emerge from the action that created them, growing from the point of touch.</li></ul></div></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 id="cab1" class="graf graf--h3 graf--leading">Use buttons to show different states.</h3><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*mHdzshog-HHTz61Msj2DkQ.gif" alt="image" /></div>The button on the left shows text indicating states. The button on the right uses the container to show different events.<ul class="postList"><li class="graf graf--li graf-after--figure">Good interactions display the events next to the button.</li><li class="graf graf--li graf-after--li">Great interactions use the button itself to show the different states.</li></ul><p class="graf graf--p graf-after--li graf--trailing">Try using the container of a button to provide visual feedback of a status. For example, you could replace the CTA with a spinner or a loading animation; or you could add an animation to the background showing progress. The solution is up to you, the idea is to use the space the user is already interacting with. Bonus points if you use the button color and copy to confirm a success state.</p></div></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 class="graf graf--h3 graf--leading">Bring attention to something important.</h3><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*3sLafwHCfF7U4tijABX1GA.gif" alt="image" /></div>The example on the left uses color and position to make an element stand out. The one on the right uses a subtle animation to call the user’s attention.<ul class="postList"><li id="ff9d" class="graf graf--li graf-after--figure">Good design uses color, size, and position to highlight an important action the user needs to notice or act upon.</li><li class="graf graf--li graf-after--li">Great design uses animation to bring attention to that important action, without being disruptive.</li></ul><p id="b584" class="graf graf--p graf-after--li graf--trailing">When the user needs to act on something important, try animating the actions to attract their attention. Start with a subtle animation and increase the intensity (change of size, color, and speed) in relation to how important the action is. Use this only for critical actions—the more you use this effect, the less impactful it becomes… and the more annoyed your user gets 😱</p></div></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h4 class="graf graf--h4 graf--leading">Conclusion</h4><p class="graf graf--p graf-after--h4">I hope these examples help you make better decisions when adding animations to your interactions. With new animation and prototyping tools like InVision’s Studio, I predict we’ll soon start seeing a renaissance of creative interactions. We just need to remember to use this new superpower responsibly.</p><p id="ef10" class="graf graf--p graf-after--p">Let’s apply animation to explain changes in states, draw attention to necessary actions, determine relationships between elements, and add a bit of fun and character to our products. By following these principles, we’ll transform our animations from good to great.</p><p id="cc5f" class="graf graf--p graf-after--p graf--trailing">Happy animating!</p></div></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*OtiVedoV9YicOXGliFo7AA.jpeg" alt="image" /></div><p class="graf graf--p graf-after--figure">Hola, amigos. I’m <a href="https://twitter.com/pablostanley" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Pablo Stanley</a>, designer and cofounder at <a href="https://carbonhealth.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Carbon Health</a>.</p><p class="graf graf--p graf-after--p">I write a comic series called <a href="https://thedesignteam.io/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">The Design Team</a> and I post design-related stuff on <a href="https://twitter.com/pablostanley" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Twitter</a>. You can also check out my<a href="https://www.youtube.com/c/sketchtogethertv" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank"> YouTube channel, Sketch Together,</a> where you’ll find tons of design tutorials.</p><p class="graf graf--p graf-after--p graf--trailing">Muchas gracias por leer.</p></div></div>


title: Arkéa : l’étonnante démission des institutions françaises
url: http://www.juriguide.com/monde-des-affaires/credit-mutuel-arkea/
created_at: 2018-03-16 15:26:25
updated_at: 2018-03-16 15:26:25
mimetype: text/html
language: fr-FR
domain_name: www.juriguide.com
preview_picture: http://www.juriguide.com/wp-content/uploads/2018/03/CreÌdit_Mutuel-1-1.jpg
http_status: 200
content:
  <p><strong>Vous êtes en tort ? Pas d’inquiétude, les institutions craqueront avant vous ! C’est la leçon qui semble se dégager de la picrocholine guerre de sécession du Crédit Mutel Arkéa à l’encontre de sa maison mère, le Crédit Mutuel. À force d’entêtement, Jean-Pierre Denis, le patron d’Arkéa, est en effet parvenu à mettre un genou à terre aux institutions françaises, au premier rang desquelles, la Banque de France. </strong></p><p>Ignorer les rappels à la loi et autres revers juridiques : voici la ligne de conduite qu’a adoptée le patron d’Arkéa, Jean-Pierre Denis, depuis que ce dernier affiche ouvertement des velléités de départ. Tout commence en 2014, lorsqu’il promet de déclencher « des hostilités ouvertes » si la Confédération nationale du Crédit Mutuel (CNCM) empêchait sa fédération bretonne de faire sécession. Une menace rapidement mise à exécution.</p><h2><strong>Premiers rappels pour le patron d’Arkéa</strong></h2><p>La bataille juridique débute véritablement en janvier 2016, avec « le vote d’un blâme par le conseil d’administration de la Confédération du Crédit Mutuel, réuni en formation disciplinaire, à l’encontre du Crédit Mutuel Arkéa ». La raison ? Arkéa a, entre autres, refusé de transmettre certaines informations prudentielles et de respecter son obligation de solidarité avec les autres entités de la CNCM.</p><p>Une décision que Jean-Pierre Denis entend bien contrecarrer en saisissant, en référé, le tribunal administratif de <a href="http://www.juriguide.com/sante/bretagne-letat-condamne-carences-fautives-dossier-algues-vertes/">Rennes</a> qui finit d’ailleurs par trancher en faveur des séparatistes bretons. Ce dernier déclare en effet que la CNCM n’était pas dans son droit en réclamant à Arkéa la transmission de certaines données pour les transmettre à la Banque centrale européenne (BCE). Mais en décembre 2016, premier coup dur pour Jean-Pierre Denis : le Conseil d’État casse le jugement rendu par les magistrats rennais. Et en profite pour pointer du doigt le « comportement d’obstruction » d’Arkéa ainsi que sa volonté d’« entraver l’action de l’organe central du réseau Crédit Mutuel ».</p><p>En juin 2017, c’est <a href="http://www.juriguide.com/monde-des-affaires/ryanair-et-easyjet-epinglees-par-lautorite-de-la-concurrence-italienne/">l’Autorité de la concurrence</a> qui porte — indirectement — l’estocade. Devant se prononcer sur les prérogatives de la CNCM dans le cadre d’opérations d’acquisitions, les sages de la rue de l’Échelle ont estimé que « la Confédération nationale du Crédit Mutuel est, en vertu de l’article L.511 du code monétaire et financier, l’organe central du groupe Crédit Mutuel (…) Le groupe Crédit Mutuel est un réseau bancaire mutualiste composé d’un réseau de caisses locales du Crédit Mutuel, qui adhèrent chacune à l’une des dix-huit fédérations régionales, elles-mêmes adhérentes à la CNCM, conformément à l’article L.512-56 du code monétaire et financier, qui rend obligatoire ce mécanisme d’adhésion de chaque entité à l’échelon supérieur. » Un « rappel à la loi » donc pour M. Denis, l’avis prohibant en effet « toute tentative de sécession ».</p><h2><strong>Jean-Pierre Denis </strong><strong>« judiciairement K.-O. »</strong></h2><p>Les revers se multiplient pour Jean-Pierre Denis. En novembre 2017, l’Office de l’Union européenne pour la propriété intellectuelle (EUIPO) juge pour sa part que « l’usage de la marque Crédit Mutuel est réservé aux entités filiales à la Confédération Nationale du Crédit Mutuel (CNCM) qui en est la propriétaire et la gardienne ». L’institution met ainsi fin à un ancien conflit autour de la marque « Crédit Mutuel ». Celle-ci confirme que « le bénéfice de cette marque “Crédit Mutuel” est indissociable de l’appartenance à la CNCM. » Le Crédit Mutuel Arkéa de Jean-Pierre Denis ne fait pas exception.</p><p>Enfin, en décembre dernier, c’est au tour de la <a href="http://www.juriguide.com/grands-proces/la-cour-de-justice-de-lunion-europeenne-se-prononce-sur-le-port-du-voile-au-travail/">Cour européenne de justice</a> de renvoyer Jean-Pierre Denis dans les cordes en affirmant que « la BCE est en droit d’organiser une surveillance prudentielle du groupe Crédit Mutuel par l’intermédiaire de la Confédération nationale du Crédit Mutuel, y compris à l’égard du Crédit Mutuel Arkéa ». Un jugement après lequel Jean-Pierre Denis était « judiciairement K.-O. », résume Laurent Mauduit.</p><p>Mais la descente aux enfers juridiques d’Arkéa ne s’est pourtant pas arrêtée là : le 9 mars dernier, l’agence Reuters annonce que « le Conseil d’Etat vient de rejeter l’essentiel des demandes du Crédit Mutuel Arkéa, qui voulait faire annuler certains des nouveaux statuts de la Confédération nationale du Crédit Mutuel (CNCM) ». « Cette décision constitue un nouveau revers judiciaire pour Arkéa », précise l’agence de presse. Et ce ne fut pas le dernier. Le 12 mars, la BCE, accompagnée de l’Autorité de contrôle prudentiel et de résolution (ACPR), revient à la charge en retoquant le projet d’indépendance d’Arkéa, le jugeant d’une « <a href="https://www.latribune.fr/entreprises-finance/banques-finance/credit-mutuel-arkea-son-projet-retoque-par-la-bce-et-la-banque-de-france-771719.html">validité juridique douteuse</a> ».</p><h2><strong>« La couardise de la Banque de France »</strong></h2><p>A-t-il pour autant renoncé à son projet ? Loin s’en faut. Jean-Pierre Denis poursuit sa « guérilla » sans tenir compte de ces différentes décisions, et son entêtement pourrait, contre toute attente, finir par payer. C’est ce que laisse présager la lecture d’une lettre rédigée par Odile Renaud-Basso, directrice générale du Trésor, et François Villeroy de Galhau, gouverneur de la Banque de France.</p><p>En effet, après avoir mis en garde Jean-Pierre Denis, en octobre 2016, de manière très claire, lui rappelant alors que « l’existence d’un seul et unique organe central pour le Crédit Mutuel ainsi que son organisation découle aujourd’hui de la loi française et qu’une résolution qui s’en affranchirait serait dénuée d’effet juridique », les deux individus sont revenus sur leurs positions.</p><p>Dans cette fameuse lettre, datée du 19 janvier 2018, les deux auteurs demandent au patron d’Arkéa de présenter aux organes compétents des caisses concernées « un scénario plus précis de sortie éventuelle ». Comme si le problème n’était plus la sécession elle-même, mais seulement ses conditions… Laissant au passage la « loi française », qu’ils avaient pourtant tenu à rappeler deux ans auparavant, de côté.</p><p>Comment en sommes-nous arrivés à ce revirement de situation ? Selon <a href="https://www.mediapart.fr/journal/economie/020318/la-delirante-guerre-de-secession-du-credit-mutuel-arkea">Médiapart</a>, ce dernier « n’est pas imputable à la direction du Trésor, qui a souhaité maintenir une position très stricte à l’encontre de Jean-Pierre Denis. Ce serait le gouverneur de la Banque de France, qui aurait voulu se montrer accommodant. Pour quelle raison ? Parce que Jean-Pierre Denis a fait le siège du Premier ministre, Édouard Philippe, et que ce dernier a fait passer le message à la Banque de France ? D’après nos sources, c’est l’hypothèse la plus vraisemblable. »</p><p>Et de conclure : « cette couardise de la Banque de France a donc eu l’effet prévisible : elle a naturellement encouragé Jean-Pierre Denis dans son aventure, et l’a décidé à passer à l’organisation d’un vote ». Autrement dit, la « mollesse » des institutions de tutelle — qui n’ont jamais pris la peine de « taper de poing sur la table » — a permis à Jean-Pierre Denis de poursuivre son aventure sécessionniste. En toute illégalité.</p><p><em>Damien</em></p>


title: Que se passe-t-il quand vous appuyez sur lecture dans Netflix ?
created_at: 2018-03-19 13:25:38
updated_at: 2018-03-19 13:25:38
mimetype: text/html
language: fr
domain_name: www.macg.co
preview_picture: https://img.macg.co/2018/3/macgpic-1520592164-10055680819228-accroche.jpg
http_status: 200
url:
  https://www.macg.co/ailleurs/2018/03/que-se-passe-t-il-quand-vous-appuyez-sur-lecture-dans-netflix-101639

content:
  <p>Netflix est le plus gros service de streaming au monde… et à ce titre l’un des plus gros utilisateurs du réseau internet. Aux États-Unis, l’entreprise exploite à elle seule plus du tiers de la bande passante pour diffuser ses films et ses séries. Avec près de 120 millions d’abonnés dans plus de 200 pays, c’est devenu en quelques années seulement un colosse mondial.</p><p>Le contenu à fournir est également immense : ce sont des dizaines de milliers de films et d’épisodes de série qui sont proposés partout dans le monde. Et chaque mois, Netflix ajoute des centaines de contenus à son immense catalogue. On n’a pas de chiffres récents, mais en 2013, l’entreprise stockait déjà 3 Po de contenus. Ce sont des péta-octets, cela représente 3000 To, ou bien encore trois millions de giga-octets… et ce chiffre a augmenté de façon exponentielle depuis.</p>
  <img src="https://img.macg.co/2018/3/macgpic-1520590213-8104316758407-sc-jpt.jpg" width="1000" height="750" alt="" /><p>Tout ceci donne le vertige, mais c’est surtout la fiabilité exemplaire de Netflix qui force le respect. Mis à part <a href="https://www.macg.co/ailleurs/2017/02/free-les-mauvais-debits-sur-netflix-merci-qui-97474">chez quelques irréductibles</a>, le service de <em>streaming</em> ne tombe jamais en panne et il est toujours d’une efficacité redoutable, même avec des connexions lentes ou peu fiables. </p>
  <p>Comment est-ce que Netflix est arrivé à un tel résultat ? Qu’est-ce qui se passe exactement quand on clique sur le bouton lecture d’une vidéo ? Voici un tour dans l’arrière du décor ! </p>
  <h2>Avant d’appuyer sur lecture : le cloud d’Amazon</h2>
  <p>On a tendance à l’oublier, mais Netflix n’a pas du tout commencé en diffusant des vidéos par internet. L’entreprise a été fondée en Californie en 1997, à une époque où l’idée de regarder une vidéo en qualité HD via sa connexion internet tenait du délire. À l’origine, la firme louait… des DVD. </p>
  <img src="https://img.macg.co/2018/3/macgpic-1520264542-85538702636993-sc-jpt.jpg" width="1000" height="750" alt="" />Avant Netflix, il y avait un autre Netflix… (Photo <a href="https://www.flickr.com/photos/juanmanuel/223881225/">Juan Manuel (CC BY-NC-ND 2.0)</a>)<p>Par rapport à ses multiples concurrents, Netflix n’avait pas construit des boutiques partout dans le monde, les disques étaient envoyés aux clients par la poste, dans des enveloppes. Autre bonne idée qui a fait la différence dans les années 2000, un abonnement mensuel plutôt qu’un paiement à la location. Néanmoins, ce n’est pas ça qui a permis à la start-up d'être toujours là aujourd'hui, c’est plutôt son sens des évolutions et son coup de génie quand, en 2007, elle se lance dans le streaming. C’était quelques mois seulement après l’achat de YouTube par Google, un temps où personne n’avait encore réussi à proposer une offre de streaming de films et séries.</p>
  <p>À l’époque, il n’y avait pas non plus d’offre de « <em>cloud</em> » bien établie et Netflix a commencé par tout faire en interne. L’entreprise a ouvert deux centres de données aux États-Unis pour fournir son contenu, mais cette approche s’est avérée lente, coûteuse et surtout peu adaptée à la croissance extrêmement rapide que le service connaissait alors. Ces deux <em>data-centers</em> étaient déjà insuffisants à leur ouverture et il a fallu immédiatement en prévoir d’autres… la stratégie n’était pas viable. </p>
  <p>Pour ne rien arranger, Netflix a connu une très grosse panne à l’été 2008. Une corruption de leur base de données a bloqué complètement l’envoi des DVD et le service de streaming naissant pendant trois jours. Cette panne a poussé l’entreprise à changer radicalement de stratégie. Elle a abandonné dans les mois qui ont suivi son matériel pour se tourner vers un petit acteur à l’époque : Amazon Web Services, souvent connu sous le nom d’AWS.</p>
  <img src="https://img.macg.co/2018/3/macgpic-1520265888-86884295302512-sc-jpt.jpg" width="1000" height="376" alt="" /><p>Aujourd'hui, AWS est le numéro un mondial des serveurs, de l’hébergement et du cloud, mais cela ne faisait qu’un an environ que le service existait quand Netflix a placé toutes ses données chez Amazon. C’était un pari et il s’est révélé gagnant, puisqu’AWS est toujours au cœur de son infrastructure, près de dix ans plus tard.</p>
  <p>Pourquoi AWS ? Netflix voulait s’assurer que son service ne soit jamais interrompu, même en cas de panne, et qu’il s’adapte en temps réel à la demande. L’offre d’Amazon lui a permis d’atteindre ces deux objectifs, à la fois en plaçant ses données dans plusieurs <em>data centers</em> dans le monde, et en augmentant régulièrement sa capacité de stockage en ajustant simplement le nombre de serveurs à sa disposition. L’entreprise a ainsi opté pour trois régions AWS, des zones géographiques distinctes où toutes ses données sont répliquées à l’identique : en Virginie du Nord et en Oregon aux États-Unis, et à Dublin en Irlande. </p>
  <p>L’idée de ce triptyque est de s’assurer qu’il y a au moins deux sources de données en fonctionnement à tout moment. Si Amazon a une panne technique dans l’un des trois <em>data centers</em>, les clients sont automatiquement transférés sur l’un des deux restants, en toute transparence. Pour s’assurer que cela fonctionne bien, Netflix fait des tests tous les mois en grandeur nature : le service simule l’arrêt total de l’une des trois régions pour vérifier que tout se passe correctement. Une région doit être « évacuée » en six minutes, c'est-à-dire qu’il faut six minutes pour répartir tous les utilisateurs qui étaient sur la région sur les deux autres. </p>
  <p>Ce type d’infrastructure est coûteux — Netflix paie trois fois plus pour reproduire la même architecture trois fois —, mais c’est l’assurance de garantir un fonctionnement même en cas de panne. Et si l’entreprise le voulait, elle pourrait étendre son architecture avec une ou plusieurs régions supplémentaires. Netflix pourrait ouvrir dans une toute autre région du monde, par exemple en Australie ou en Asie, et ainsi répartir davantage ses utilisateurs. </p>
  <img src="https://img.macg.co/2018/3/macgpic-1520269353-90349805230918-sc-jpt.jpg" width="1000" height="567" alt="" />La carte actuelle des <em>data centers</em> AWS. En vert, les régions qui seront bientôt ouvertes. <p>Ce type d’architecture redondante est très difficile à gérer et Netflix a souvent été obligé de créer ses propres solutions pour s’assurer que toutes les données soient identiques partout, et aussi que n’importe quelle région puisse être fermée sans impact visible pour les utilisateurs. Même si c’est plus compliqué et probablement coûteux en développement, l’entreprise a économisé en passant à AWS à la place de ses propres solutions maison. </p>
  <p>Pour comprendre pourquoi, il est important de savoir comment fonctionne AWS. Contrairement à un hébergeur traditionnel, où vous louez un serveur physique ou virtuel au mois, Amazon propose des serveurs qui peuvent être activés ou désactivés en quelques secondes. Et il les fait payer à l’heure près : si Netflix doit convertir une vidéo, il peut louer un serveur puissant pendant quelques heures et le rendre ensuite. Si l’entreprise était restée sur l’idée de gérer ses propres serveurs, elle devrait payer en permanence pour des serveurs qui ne seraient pas constamment utilisés.</p>
  <p>Pour simplifier, Netflix dépend principalement de deux offres au sein d’AWS : les <a href="https://aws.amazon.com/fr/ec2/">serveurs à la demande EC2</a> pour les traitements des vidéos et toutes les opérations de calcul, les <a href="https://aws.amazon.com/fr/s3/">giga de S3</a> pour stocker les fichiers originaux et les versions optimisées. C’est en fait plus complexe que cela, il y a aussi des bases de données (en partie <a href="https://aws.amazon.com/fr/dynamodb/">DynamoDB</a>, en partie <a href="http://cassandra.apache.org">Cassandra</a>) et d’autres services annexes, mais on a essentiellement ces deux éléments, le traitement et le stockage.</p>
  <img src="https://img.macg.co/2018/3/macgpic-1520270133-91128984151531-sc-jpt.jpg" width="1000" height="649" alt="" />Extrait de la <a href="https://aws.amazon.com/fr/ec2/pricing/on-demand/">grille tarifaire d’EC2 à Dublin</a>. Notez les tarifs en heure, et non au mois. <p>Le traitement le plus évident concerne les vidéos elles-mêmes. Quand Netflix veut ajouter un contenu à son offre, l’entreprise récupère une vidéo de base qui doit ensuite être traitée de plusieurs manières avant d’être proposée en streaming. Il y a une étape de validation, pour vérifier que la source n’est pas corrompue ou ne présente pas de défaut. Quand c’est bon, le fichier passe par un processus nommé en interne <em>media pipeline</em> qui implique plus de 70 outils différents et qui est totalement automatisé. La finalité est de convertir le fichier source qui peut peser plusieurs téra-octets, en fichiers plus légers, adaptés à la diffusion en streaming. </p>
  <p>Dans le jargon, on parle de <em>transcoding</em> et c’est une étape qui nécessite énormément de puissance processeur. C’est aussi une étape assez lente et c’est pourquoi Netflix a mis en place un processus complexe pour accélérer les choses. Chaque fichier source est découpé en de multiples morceaux et chaque serveur se charge d’un morceau pour avancer le travail en parallèle. À la fin du processus, la vidéo est reconstituée en recollant tous les morceaux. </p>
  <p>Netflix peut mobiliser jusqu’à 300 000 processeurs en même temps pour transcoder une vidéo. Cette énorme capacité de calcul, supérieure à bien des supercalculateurs actuellement en fonctionnement, lui permet d’aller vite, très vite. Une demi-heure peut suffire pour qu’un nouveau fichier soit converti et disponible au streaming. Ce processus entièrement automatisé sert régulièrement pour reconvertir la totalité du catalogue : <a href="https://www.igen.fr/itunes/2015/12/netflix-des-videos-plus-legeres-et-de-meilleure-qualite-94195">une fois en 2015</a> pour réduire la taille des flux vidéo tout en améliorant leur qualité ; <a href="https://www.igen.fr/itunes/2016/12/netflix-encore-encode-pour-sa-fonction-de-telechargement-98073">une fois en 2016</a> pour que les vidéos puissent être téléchargées et encore <a href="https://www.igen.fr/app-store/2017/03/netflix-va-reduire-le-poids-des-videos-scene-par-scene-98938">une fois en 2017</a> pour améliorer à nouveau la qualité des vidéos. Et tout ceci se fait en arrière-plan : dès que les serveurs ne sont plus autant sollicités pour fournir du contenu, ils servent à transcoder un petit morceau de vidéo.</p>
  <p>Cet aspect est essentiel pour Netflix, car cela lui permet de réduire régulièrement le poids des vidéos et donc d’économiser en frais de bande passante. L’entreprise exploite par ailleurs des techniques de pointe, par exemple pour analyser indépendamment chaque scène et ajuster ainsi la qualité en fonction de ce qui se passe. Une scène d’action nécessite un débit supérieur à celui d'une séquence calme pour offrir le même résultat visuellement et en travaillant ainsi plus finement, on obtient des fichiers plus légers à qualité égale, ou de meilleure qualité à poids égal.</p>
  <img src="https://img.macg.co/2018/3/macgpic-1520348966-169960568083612-jpt.jpg" width="932" height="523" alt="" />En travaillant scène par scène, Netflix a réussi à améliorer la qualité des vidéos diffusées sur les toutes petites connexions. À gauche, l’ancienne qualité ; à droite, la nouvelle. Dans les deux cas, le poids du fichier est similaire.<p>C’est bénéfique pour Netflix qui économise sa bande passante, mais c’est aussi bénéfique pour l’utilisateur. Même avec une connexion internet médiocre, vous aurez en moyenne une meilleure qualité sur ce service que chez un concurrent qui se contente d’un seul profil pour toutes les vidéos. Cela veut dire aussi que Netflix gère énormément de fichiers pour chaque épisode ou film à son catalogue. En fonction de la vitesse de votre connexion, mais aussi du matériel utilisé pour lire la vidéo, vous aurez un flux vidéo différent. </p>
  <p>Ajoutez à cela toutes les pistes audios et les fichiers de sous-titre que Netflix doit également gérer et vous aurez vite le vertige. La deuxième saison de <em>Stranger Things</em>, par exemple, est composée de neuf épisodes seulement, mais elle représente au total pas moins de 9 570 fichiers. Et ce n’est qu’une seule saison d’une seule série… imaginez ce que cela représente pour tout le catalogue ! </p>
  <img src="https://img.macg.co/2018/3/macgpic-1520440509-261500874028627-co-jpt.jpg" width="585" height="214" alt="" />Chaque vidéo est composée d’une multitude de fichiers différents, en fonction des capacités du client de lecture, des choix de langue et de sous-titre. Pour certains épisodes de série, cela représente 1 200 fichiers (image <a href="https://medium.com/netflix-techblog/content-popularity-for-open-connect-b86d56f613b">Netflix</a>).<p>Mais assez parlé de la préparation, venons-en à la lecture.</p>
  <h2>Un nuage très local pour distribuer les vidéos</h2>
  <p>Quand vous ouvrez l'application Netflix, que ce soit sur Apple TV, sur iPhone, sur un téléviseur connecté ou même dans un navigateur web, vous vous connectez d’abord aux <i>data centers</i> d’Amazon. Les serveurs EC2 ne servent pas qu’au traitement des vidéos, ils ont de nombreux autres rôles, à commencer par suivre tout ce que chaque utilisateur regarde, veut regarder, peut regarder et pourrait avoir envie de regarder. </p>
  <img src="https://img.macg.co/2018/3/macgpic-1520351360-172353681332138-sc-jpt.jpg" width="1000" height="587" alt="" />Netflix personnalise l’expérience de chaque utilisateur… jusqu’aux images d’illustration qui sont <a href="https://medium.com/netflix-techblog/artwork-personalization-c589f074ad76">différentes en fonction des goûts de chacun</a>. Si vous aimez plutôt les comédies romantiques, l’horreur ou la science-fiction, vous verrez une image différente pour chaque série ou film. <p>Netflix conserve un historique de tout ce que vous avez regardé et le service s’en sert pour alimenter ses suggestions. Les avis que vous pouvez laisser entrent également dans l’immense algorithme mis au point au fil des années, tout comme les éléments ajoutés par vos soins à votre liste Netflix. Les suggestions sont calculées par des serveurs, qui servent aussi à contrôler ce que vous pouvez regarder, en fonction de votre pays, mais aussi d’éventuelles restrictions parentales. Une <a href="https://www.igen.fr/itunes/2018/03/netflix-va-muscler-son-controle-parental-103198">nouveauté à venir</a> permettra d’ailleurs à des parents de bloquer un film ou une série en particulier, et le serveur en tiendra compte également pour donner son feu vert.</p>
  <p>On a seulement parlé d’AWS jusque-là, et pour cause, le <i>cloud</i> d’Amazon est vraiment au cœur du fonctionnement de Netflix. Néanmoins, ce n’est pas la seule brique dans l’architecture du service : quand vous avez choisi votre vidéo et que vous appuyez sur lecture, le fichier n’est pas récupéré sur le stockage fourni par S3. Non pas que ce soit impossible, mais ce serait lent, sauf à habiter juste à côté des <i>data centers</i> d’Amazon.</p>
  <p>Pour offrir une bonne expérience à tous ses utilisateurs, même les plus éloignés des États-Unis et de l'Irlande où sont situés ses serveurs, Netflix utilise un <em>content delivery network</em> (CDN). L’idée est assez simple : placer le contenu sur des serveurs aussi près que possible des utilisateurs pour limiter les temps d’attente et diminuer la latence. Et même si la connexion directe à AWS était rapide, tous les abonnés ne pourraient pas accéder en même temps à une seule source sans congestionner les réseaux, y compris ceux énormes d’Amazon. C’est pourquoi on a recours à un CDN qui répartit la charge plus équitablement dans le monde.</p>
  <img src="https://img.macg.co/2018/3/macgpic-1520436804-257796187583430-sc-jpt.jpg" width="1000" height="600" alt="" />L’état du CDN de Netflix, <a href="https://media.netflix.com/fr/company-blog/how-netflix-works-with-isps-around-the-globe-to-deliver-a-great-viewing-experience">courant 2016</a>. <p>Dans un premier temps, Netflix a essayé de développer son propre CDN, mais comme pour les serveurs, cette tentative a vite été remisée. Courant 2009, la firme a fait appel aux gros acteurs du marché, comme <a href="https://www.akamai.com/">Akamai</a> (numéro un mondial), <a href="https://www.limelight.com/">Limelight</a> et <a href="http://www.level3.com/en/">Level 3</a>, et utilisé leur capacité de stockage et de diffusion. Cela a permis à Netflix de se concentrer sur ses algorithmes de conversion et ses outils de recommandation, mais ses besoins étaient tels que les coûts de gestion se sont envolés. Dès 2011, l’entreprise est revenue à une solution maison, mais en employant une idée plus originale et nouvelle.</p>
  <p>Les CDN traditionnels reposent sur des <em>data centers</em> existants, où des serveurs stockent une copie locale de ressources qui seront ainsi disponibles plus rapidement pour les utilisateurs à proximité. Avec son programme <a href="https://openconnect.netflix.com/fr_fr/">Open Connect</a>, Netflix utilise également des serveurs qui stockent des ressources, mais l’entreprise a choisi de placer ces ordinateurs au plus près de ses clients, dans deux endroits clés du web.</p>
  <p>Les serveurs Netflix sont rouges comme le logo de l’entreprise et sont nommés en interne OCA, pour <em>Open Connect Appliances</em>. On en trouve tout d’abord <a href="https://openconnect.netflix.com/fr_fr/peering-locations/">dans les <em>Internet Exchange Point</em></a> (IXP), des points d’interconnexion sur le réseau où les fournisseurs d’accès à internet (FAI) se connectent. Pour se rapprocher encore davantage des utilisateurs, on en trouve surtout chez ces derniers. Depuis 2012, la firme propose aux FAI du monde entier d’installer ses serveurs rouges directement sur leurs réseaux. </p>
  <img src="https://img.macg.co/2018/3/macgpic-1520436290-257281733838535-sc-jpt.jpg" width="1000" height="750" alt="" />Présentation en 2016 des différents serveurs OCA installés par Netflix dans les FAI du monde entier (image <a href="https://twitter.com/brendangregg/status/766009245804277760">@brendangregg</a>). <p>Netflix ne fait pas payer pour ce service, que n’importe quel FAI peut demander en remplissant un formulaire. Une étude de faisabilité est alors menée et si elle est concluante, l’entreprise américaine envoie à ses frais un ou plusieurs OCA, en fonction des besoins estimés. Le FAI l’installe dans l’un de ses centres de données et à partir du moment où le serveur est configuré par Netflix et activé, ses abonnés utiliseront en priorité les vidéos stockées sur cet ordinateur. </p>
  <p>Pourquoi est-ce qu’un FAI accepterait de stocker gratuitement des serveurs tiers qu’il ne contrôle pas, de les alimenter et de les relier à son propre réseau ? La réponse est en fait assez simple : en entrant dans le programme Open Connect, le fournisseur assure à la fois à ses utilisateurs une meilleure qualité de service, tout en réduisant ses factures en matière de bande passante vers l’extérieur. Le premier point est facile à comprendre : la vidéo étant stockée à proximité immédiate des abonnés, elle est disponible plus rapidement que si elle devait venir d’un serveur situé dans un autre pays. </p>
  <p>Pour le fournisseur, c’est aussi un moyen de réduire sa facture de bande passante depuis son propre réseau vers l’extérieur, vers les autres FAI et vers les <em>data centers</em> du monde entier. Il est difficile de généraliser le prix que cela coûte, mais une chose est sûre : en stockant les vidéos de Netflix sur son propre réseau, cela ne coûte plus rien au FAI, si ce n’est les frais de fonctionnement des OCA. Et certains estiment qu’ils peuvent économiser plusieurs dizaines de milliers de dollars par serveur installé, ce qui est une somme significative.</p>
  <img src="https://img.macg.co/2018/3/macgpic-1520437523-258514662702442-sc-jpt.jpg" width="1000" height="688" alt="" />Illustration de Netflix : depuis l’un de ses trois data-centers principaux (ici, celui de Californie), les vidéos sont stockées sur les OCA d’un fournisseur d’accès (ici, situé en Australie). C’est cette copie locale qui est ensuite exploitée par les clients du FAI. <p>C’est pour cette raison que tous les FAI, ou presque, ont accepté l’offre de Netflix. En France, c’est le cas d’Orange, de Bouygues et de SFR… mais pas de Free. Les problèmes d’accès au service de streaming constatés par les abonnés sont directement liés au choix de l’entreprise de Xavier Niel de ne pas accepter les OCA, pour une raison qui n’est pas exactement connue<sup>. Les clients de Free doivent accéder aux vidéos stockées sur un serveur hors du réseau du FAI et il y a tant d’utilisateurs de Netflix que le lien vers ce serveur est trop petit pour offrir un service correct à tout le monde. </sup></p>
  <p>Même si certains acteurs résistent encore, c’est un coup de génie de la part de Netflix qui a réussi à casser les prix pour créer son réseau mondial de distribution. Les FAI trouvent leur compte autant que le service de streaming, ce qui a permis à Open Connect de se déployer partout et de servir exclusivement à diffuser toutes les vidéos depuis au moins 2016. À cette époque, le réseau diffusait plusieurs dizaines de térabits par seconde aux heures de pointe, et ce chiffre augmente sans arrêt. </p>
  <p>Et même si les serveurs placés chez les FAI ne disposent pas nécessairement du contenu intégral de Netflix, ils stockent le contenu le plus populaire pour s’assurer que la majorité des vidéos ne quittent jamais le réseau local. Le reste provient des OCA placés dans les IPX qui disposent en théorie du catalogue intégral du service, et en dernier recours de S3, le stockage d’Amazon qui contient l'original de tout le catalogue. </p>
  <img src="https://img.macg.co/2018/3/macgpic-1520353256-174249763453617-sc-jpt.jpg" width="1000" height="555" alt="" />Schéma explicatif <a href="https://openconnect.netflix.com/Open-Connect-Overview.pdf">fourni par Netflix</a>, qui montre le lien entre le cloud d’Amazon (AWS) et les serveurs installés par Netflix chez les fournisseurs d’accès à internet (OCA). AWS est toujours utilisé pour gérer le client Netflix et les autorisations, mais les OCA font le plus gros du travail en termes de volumes échangés. <p>Netflix collecte de nombreuses données sur l’utilisation de son service et l’entreprise s’en sert pour essayer de prédire les contenus qui seront les plus populaires. Elle peut le faire à l’échelle globale, mais aussi locale, en déterminant des profils par pays, voire par région à l’intérieur des pays. À partir de ces informations, les OCA stockent chaque nuit chez les FAI les vidéos les plus susceptibles d’être regardées le lendemain. L’opération est faite quand Netflix est le moins utilisé, et c’est aussi quand le réseau du fournisseur d’accès sert le moins, pour limiter au maximum l’impact des serveurs.</p>
  <p>Comment Netflix détermine ce qu’un FAI devrait stocker ? Il y a des cas évidents, comme la sortie d’une nouvelle série populaire : tous les serveurs Netflix du monde entier auront sans doute une copie de la dernière saison de <em>House of Cards</em> quand elle sortira, par exemple. Mais cela ne s’arrête pas aux cas les plus évidents, et la firme a mis au point un algorithme sophistiqué qui analyse les habitudes de lecture de chaque coin du monde pour stocker automatiquement les films et séries les plus susceptibles d’être demandés. </p>
  <p>Vous vous souvenez que chaque épisode de série, documentaire ou film est constitué de centaines de fichiers différents ? L’algorithme ne se contente pas de sélectionner un contenu, il charge des fichiers. C’est logique : la bande-son et les sous-titres français seront plus populaires en France qu’en Allemagne. Cela veut aussi dire que si l’iPhone est majoritairement utilisé à un endroit, l’algorithme ne sélectionnera pas nécessairement les fichiers les plus lourds. </p>
  <p>Le système est encore plus optimisé que cela. Si un contenu est jugé extrêmement populaire, il ne sera pas stocké en un seul exemplaire. Au contraire, Netflix envoie plusieurs copies, pour éviter de surcharger un serveur en répartissant la charge, et aussi pour s’assurer une redondance, même au niveau le plus local. En général, chaque FAI dispose de plusieurs serveurs OCA, et chacun est totalement indépendant. </p>
  <img src="https://img.macg.co/2018/3/macgpic-1520441024-262015494501393-sc-jpt.jpg" width="1000" height="502" alt="" /><a href="https://openconnect.netflix.com/fr_fr/sample-architectures/">Schéma</a> du fonctionnement d’Open Connect : à gauche, des serveurs placés sur les IPX, les principaux nœuds d’interconnexion d’internet ; à droite, deux OCA, les serveurs installés par Netflix chez les FAI, fournissent le contenu aux abonnés du FAI. Dans cet exemple, si l’un des deux OCA tombe en panne, l’autre prend le relai. Et si les deux ne fonctionnent pas, les clients accèdent alors directement au niveau supérieur. <p>Tout est prévu pour éviter les interruptions de service en cas de problème. En cas de panne matérielle sur un OCA hébergé par un FAI, tous les autres prennent le relai immédiatement. Et en cas de force majeure, le système est conçu pour basculer automatiquement sur le serveur rouge le plus proche, soit ailleurs sur le réseau du FAI, soit dans les IPX et vraiment en dernier recours, aux serveurs d’Amazon. De la même manière, si trop de personnes se connectent à un même serveur, les utilisateurs seront automatiquement répartis sur un autre serveur. </p>
  <p>Tout ceci est possible parce que Netflix maîtrise la chaîne complète. Par exemple, toutes les applications savent gérer ces transferts transparents d’un serveur à l’autre, y compris pendant la lecture. Sans que vous le sachiez, vous changez peut-être de source à plusieurs reprises pendant les 45 minutes que dure l’épisode de votre série. Naturellement, les changements interviennent aussi si la qualité de votre connexion internet change, ce qui explique que vous passez parfois de la HD à une bouillie de pixels. Netflix s’assure que la lecture ne s’arrête jamais, quitte à réduire la qualité visuelle, mais l'application vérifie aussi que le serveur que vous utilisez à un instant donné est bien le meilleur. Et s’il détermine que ce n’est plus le cas, il en changera dans la foulée. </p>
  <img src="https://img.macg.co/2018/3/macgpic-1520442279-263270533671776-sc-jpt.jpg" width="1000" height="617" alt="" />En utilisant Netflix dans un navigateur, vous pouvez obtenir des informations détaillées sur le flux vidéo en appuyant sur les touches <code>control option shift d</code>. Vous y verrez notamment l’adresse du serveur utilisé (en bleu) et vous noterez qu’il y en a deux, une pour la vidéo et une pour l’audio. D’ailleurs, la qualité sonore est privilégiée en cas de chute du débit (l’image est dégradée avant le son).<h2>Pour conclure</h2>
  <p>Expliquer ce qui se passe quand on appuie sur lecture dans Netflix est long et assez compliqué, mais c’est pour une bonne raison. Des serveurs d’Amazon jusqu’aux machines rouges installées directement chez les fournisseurs d’accès à internet, la firme a créé au fil des années un système complexe, mais d’une efficacité redoutable, le tout à un prix très raisonnable qui lui donne un avantage concurrentiel évident. </p>
  <p>L’approche de Netflix est originale<sup> et payante. Elle repose sur du matériel — les serveurs OCA sont conçus en interne —, mais la partie la plus importante est logicielle. Le service a pris une longueur d’avance grâce à son processus de conversion qui lui permet d’offrir une meilleure qualité d’image tout en réduisant sa bande passante ainsi qu'à ses algorithmes qui lui permettent de savoir à l’avance les contenus qui seront populaires. </sup></p>
  <p>Si le sujet vous intéresse, vous pouvez encore l’approfondir grâce à la politique d’ouverture de Netflix. Là où la majorité des entreprises gardent jalousement leurs secrets de fabrication, Netflix diffuse régulièrement des informations techniques, en particulier <a href="https://www.medium.com/netflix-techblog">sur le Netflix Technology Blog</a>. Le service propose aussi bon nombre d’outils utilisés en interne en <i>open source</i>, vous les trouverez tous <a href="https://netflix.github.io">sur ce site</a>.</p>


title: Going Serverless with Amazon Web Services (AWS) — The Modern Approach
created_at: 2018-03-20 21:44:43
updated_at: 2018-03-20 21:44:43
mimetype: text/html
domain_name: hackernoon.com
preview_picture: https://cdn-images-1.medium.com/max/1200/1*9frjLC-8ztLC0AlDin5-JA.png
http_status: 200
url:
  https://hackernoon.com/going-serverless-with-amazon-web-services-aws-the-modern-approach-245fa9203f47?gi=86bc00f060d6

content:
  <div class="section-inner sectionLayout--insetColumn"><blockquote class="graf graf--blockquote graf-after--h3"><div>This is the <strong class="markup--strong markup--blockquote-strong">second</strong> blog of a series of two blogs, Going Serverless with Amazon Web Services (AWS)</div></blockquote><blockquote class="graf graf--blockquote graf-after--blockquote"><div><a href="https://medium.com/@cwidanage/going-serverless-with-amazon-web-services-aws-the-traditional-approach-fb45a7cc5dc2" class="markup--anchor markup--blockquote-anchor" target="_blank">1. The Traditional Approach <em class="markup--em markup--blockquote-em">🚶</em></a></div></blockquote><blockquote class="graf graf--blockquote graf-after--blockquote"><div>2. The Modern Approach <em class="markup--em markup--blockquote-em">🚴</em></div></blockquote></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">In the first blog of this series, <a href="https://medium.com/@cwidanage/going-serverless-with-amazon-web-services-aws-the-traditional-approach-fb45a7cc5dc2" class="markup--anchor markup--p-anchor" target="_blank">Going Serverless with Amazon Web Services (AWS) — The Traditional Approach</a>, I have discussed and demonstrated the process of deploying a very basic serverless application <em class="markup--em markup--p-em">manually </em>through AWS console. If you have gone through that blog or, if you have done this once to deploy your own serverless application, you might already know the pain of doing that in the traditional track.</p><p class="graf graf--p graf-after--p">Let me quickly recap, what we have been doing so far.</p><p class="graf graf--p graf-after--p">We were in the process of building a backend for a simple <em class="markup--em markup--p-em">contact us </em>for a static web site.</p><div class="aspectRatioPlaceholder"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*vtrQxvoUJFkRLfKWpfGvkQ.png" alt="image" /></div>Contact Us form<h4 id="d95a" class="graf graf--h4 graf-after--figure"><strong class="markup--strong markup--h4-strong">The painful Story</strong></h4><p class="graf graf--p graf-after--h4">We first tried a simple lambda function written in the AWS console which was triggered by an API gateway event. Later we wanted to use some 3rd party NodeJS libraries in my function and we had to write our lambda function in my local computer and upload it as a zip, through the AWS console.</p><p class="graf graf--p graf-after--p">By following the best practices, we even created a AWS IAM role for my lambda function, which enables only necessary permissions to the function.</p><p class="graf graf--p graf-after--p">We could create a API Gateway endpoint from the lambda console itself, but had to revisit APIG console to apply few teaks.</p><p id="b975" class="graf graf--p graf-after--p">Already sounds painful right? 🤕</p><p id="f88d" class="graf graf--p graf-after--p">This is just the beginning of the story.</p><p id="eaaf" class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Bonus Pain 1 : Changing the existing code</strong></p><p class="graf graf--p graf-after--p">Let’s assume that we want to change the code of my function to include few more validations.</p><p class="graf graf--p graf-after--p">Doing this update is extremely easy within the AWS console! 😉</p><p id="dd9f" class="graf graf--p graf-after--p">Once you upload the function, Lambda console unzips it, and show us an editable code in the dashboard. We just have to edit our code and click big orange <strong class="markup--strong markup--p-strong">Save </strong>button. 🤠</p><p class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Bonus Pain 2 : Adding new 3rd party libraries/ dependencies</strong></p><p class="graf graf--p graf-after--p">Assume, we want to add a new 3rd party library to add more functionalities to our lambda function. (We wanted to add <a href="https://validatejs.org/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank"><em class="markup--em markup--p-em">validate js</em></a> in our sample use-case)</p><p id="c182" class="graf graf--p graf-after--p">Bummer! You can’t do that in Lambda console. 😦</p><p class="graf graf--p graf-after--p">Now I am falling back to the code in my local computer. I have to install my node module manually and repack the code with dependencies.</p><p class="graf graf--p graf-after--p">Ooops!! Since I have previously edited this code in AWS console, now I have an outdated version locally. Have to go back to the Lambda console to copy or download the latest code. 😣</p><p class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Bonus Pain 3 : Associating lambda with few more AWS resources</strong></p><p class="graf graf--p graf-after--p">Up to now, our lambda wanted to talk just with DynamoDB. Now we want our lambda to talk with S3 as well(assume we added a file upload feature to contact us form). Now the process is as follows,</p><ul class="postList"><li class="graf graf--li graf-after--p">Navigating to S3 console and create a bucket</li><li class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Reading S3 javascript SDK docs since we don’t know it’s API.</strong></li><li class="graf graf--li graf-after--li">Adding necessary patches to the existing code to handle file upload.</li><li class="graf graf--li graf-after--li">Uploading the code through AWS lambda console and clicking big orange <strong class="markup--strong markup--li-strong">Save </strong>button.</li></ul><p id="c618" class="graf graf--p graf-after--li">Alright! 😫 . Now my lambda can upload to S3!!</p><p class="graf graf--p graf-after--p">But when I test my setup, I get a big error when trying to upload my content to S3.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/0*1HRBrz4-rkTI5U3c.jpg" alt="image" /></div>Lambda fails to access S3<p class="graf graf--p graf-after--figure"><strong class="markup--strong markup--p-strong">Reason?</strong></p><p id="fd1b" class="graf graf--p graf-after--p">I followed best practices in my old programming books and gave only necessary permissions to Lambda initially. Now my lambda can’t talk with S3.</p><p class="graf graf--p graf-after--p">So I have to edit the IAM role assigned to lambda by adding new permissions to talk with S3.</p>This is someone who just started Serverless development on traditional approach<p class="graf graf--p graf-after--figure">In this blog, let me show you a more convenient way of developing a serverless application without going through such painful process. I would like to introduce this process as the <strong class="markup--strong markup--p-strong">Modern Approach for Serverless development.</strong></p><h3 class="graf graf--h3 graf-after--p">🚴 <em class="markup--em markup--h3-em">Modern Approach — Sigma</em></h3><p class="graf graf--p graf-after--h3"><a href="https://sigma.slappforge.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Sigma</a> is a modern and feature-rich browser based IDE developed by a <a href="https://www.slappforge.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">team of engineers</a> from <a href="http://srilanka.travel/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Sri Lanka</a>, who have gone through the above painful process for years while <a href="https://www.adroitlogic.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">developing enterprise integration solutions</a>. I would like to introduce <a href="https://sigma.slappforge.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Sigma </a>as the modern approach for serverless development, since it solves most of the pain points that developers have to face while developing serverless applications.</p><p class="graf graf--p graf-after--p">Just go through the following steps for implementing the same use-case that we came across in<em class="markup--em markup--p-em"> </em><a href="https://medium.com/@cwidanage/going-serverless-with-amazon-web-services-aws-the-traditional-approach-fb45a7cc5dc2" class="markup--anchor markup--p-anchor" target="_blank"><em class="markup--em markup--p-em">Going Serverless with Amazon Web Services (AWS) — The Traditional Approach</em></a> and <strong class="markup--strong markup--p-strong">experience the streamlined process for forging SLApps(Server-less Apps) </strong>yourself.</p><h4 class="graf graf--h4 graf-after--p">Step 1 — Creating a New Project</h4><p class="graf graf--p graf-after--h4">Create a project by giving a name, description and the AWS location to deploy the resources.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*5InwObyj-qyEiuubved_mQ.png" alt="image" /></div>Creating a new Project in Sigma<p class="graf graf--p graf-after--figure">Once you create a new project, Sigma will show you the main editor view.</p></div><div class="section-inner sectionLayout--fullWidth"><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*WTT8R5d7CDRwzUJMhpwddw.png" alt="image" /></div>Sigma main editor view</div><div class="section-inner sectionLayout--insetColumn"><p id="c4f5" class="graf graf--p graf-after--figure">When you load the editor view for the first time, you will notice few things which you won’t see in other editors.</p><ol class="postList"><li id="ec60" class="graf graf--li graf-after--p">A List of AWS resources with a numerical badge in front.</li><li id="ae18" class="graf graf--li graf-after--li">Red colored warning in the Lambda function handler</li></ol><h4 class="graf graf--h4 graf-after--li">A List of AWS resources with a numerical badge infront.</h4><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*pt3e46Mr5XDo_7WePvy6Mg.png" alt="image" /></div>Currently supported AWS resources in SIgma<p id="eef0" class="graf graf--p graf-after--figure">This is the list of AWS resources that are currently supported by Sigma. However, this doesn’t mean you can’t use other AWS resources in Sigma code. These are just the super powered resources which are currently supported and <a href="https://www.slappforge.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">we</a> are working hard to grow this list.</p><p id="b010" class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">What’s so special about these resource?</strong></p><p class="graf graf--p graf-after--p">You can drag and drop these resources to your editor! Yes you read it right.</p><blockquote class="graf graf--pullquote graf-after--p"><div>Drag and Drop!! Drag and Drop!! Drag and Drop!!</div></blockquote><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*csA_OvhCDSTdGkmQxSa84Q.gif" alt="image" /></div>Drag and Drop resources to editor<p class="graf graf--p graf-after--figure">Numerical badge indicates the number of unique resources of the same type which are already being used in the current project. Once you create a resource in your project, this count will increase and also those resources will be visible in a sub list, where you can directly use the same resource(without re-configuring) whenever you need it again.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*q4fSQuwLdOEKPbWZhdoFPg.png" alt="image" /></div>Resource List with usage<p class="graf graf--p graf-after--figure">Oh! very bad that I have mistyped the name of <a href="http://srilanka.travel/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Sri Lanka</a>.</p><p class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">I can correct this typo in two ways.</strong></p><ol class="postList"><li class="graf graf--li graf-after--p">Click on the blue DynamoDB icon on left corner and do the corrections in the UI.</li></ol></div><div class="section-inner sectionLayout--insetColumn"><p id="a4fb" class="graf graf--p graf-after--figure">2. Correct in the code itself, as we usually do. Changes in the code get automatically reflected in the UI!!</p></div><div class="section-inner sectionLayout--insetColumn"><h4 id="a6a3" class="graf graf--h4 graf-after--figure">Step 2 — Creating the DynamoDB table</h4><p id="e7ab" class="graf graf--p graf-after--h4">For our use case that we have explained in detail in the first blog of this series, <a href="https://medium.com/@cwidanage/going-serverless-with-amazon-web-services-aws-the-traditional-approach-fb45a7cc5dc2" class="markup--anchor markup--p-anchor" target="_blank">Going Serverless with Amazon Web Services (AWS) — The Traditional Approach</a>, we wanted to create a new DynamoDB table with name <em class="markup--em markup--p-em">contact_us </em>with <em class="markup--em markup--p-em">email </em>as the partition key and <em class="markup--em markup--p-em">date </em>as the sort key.</p><p class="graf graf--p graf-after--p">Since, we want to save date with every contact_us entry, let me declare that variable in my code first.</p></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">You noticed that right 😎. We have <strong class="markup--strong markup--p-strong">intelligent code suggestions</strong> built into the Sigma IDE!</p><p class="graf graf--p graf-after--p">Let me go ahead and create my new DynamoDB table.</p></div><div class="section-inner sectionLayout--insetColumn"><p id="c2f5" class="graf graf--p graf-after--figure"><strong class="markup--strong markup--p-strong">Done!!!</strong> We have created a table and even we have <strong class="markup--strong markup--p-strong">generated the code</strong> to do a <em class="markup--em markup--p-em">put operation </em>on the same table. We are not going to disturb your coding rhythm by forcing you to navigate away from your code as you had to do in <a href="https://medium.com/@cwidanage/going-serverless-with-amazon-web-services-aws-the-traditional-approach-fb45a7cc5dc2" class="markup--anchor markup--p-anchor" target="_blank">traditional approach</a>. We have streamlined the process of creating and using resources!</p><p class="graf graf--p graf-after--p">You noticed that again right 😎. <strong class="markup--strong markup--p-strong">Intelligent code suggestion works even inside the resource popups!!</strong></p><h4 class="graf graf--h4 graf-after--p">Red colored warning in the Lambda function handler</h4><p class="graf graf--p graf-after--h4">Still we have the so called <em class="markup--em markup--p-em">red colored warning in the Lambda function handler.</em></p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*x6LVaW9mBsOCh6w5z3Qbkg.png" alt="image" /></div>Warning in the lambda handler<p id="f5bd" class="graf graf--p graf-after--figure">As we know, in order to execute a lambda function, we have to trigger it with an event. With this red warning, <a href="https://sigma.slappforge.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">sigma</a> is reminding us that, our lambda still doesn’t have an event attached.</p><p class="graf graf--p graf-after--p">Let’s go ahead and solve this issue too. In our use case, We are going to trigger this lambda using a API Gateway event(a POST request).</p><h4 id="debc" class="graf graf--h4 graf-after--p">Step 3 — Creating an API Gateway endpoint and adding that as a trigger</h4><p class="graf graf--p graf-after--h4">Doing this is very much similar to what we did with DynamoDB. Just keep dragging and dropping!</p></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">With few mouse clicks and key strokes, I just completed the following list of tasks.</p><ol class="postList"><li class="graf graf--li graf-after--p">Created an API with name <em class="markup--em markup--li-em">contact us end point.</em></li><li id="bc2b" class="graf graf--li graf-after--li">Added a resource to that endpoint (/contact) which accepts a POST request.</li><li class="graf graf--li graf-after--li">Enabled CORS on that endpoint. (Remeber, we had to navigate back to the API Gatway console in <a href="https://medium.com/@cwidanage/going-serverless-with-amazon-web-services-aws-the-traditional-approach-fb45a7cc5dc2" class="markup--anchor markup--li-anchor" target="_blank">traditional approach</a>, just to do this)</li><li class="graf graf--li graf-after--li">Deployed my API with the stage name <em class="markup--em markup--li-em">prod.</em></li><li class="graf graf--li graf-after--li">Added my newly created API as a trigger to the lambda function.</li></ol><p class="graf graf--p graf-after--li">With this step, I just completed the first <strong class="markup--strong markup--p-strong">version </strong>of my contact us form backend!!</p><p id="e29d" class="graf graf--p graf-after--p">Wait…. We just came across the keyword <strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">version</em>. </strong>Let me introduce you the next big feature of <a href="https://sigma.slappforge.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Sigma</a>.</p><p class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Version controlling is built into Sigma IDE. </strong>Sigma is tightly integrated with <a href="https://github.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Github</a> which is the most popular web-based hosting service for version control using git. You can directly commit your project to github, simply by spending few mouse clicks.</p>A person who never expected this much of features from a browser based IDE which is still in beta<p class="graf graf--p graf-after--figure"><strong class="markup--strong markup--p-strong">Step 4 — Committing the first version to github</strong></p><p class="graf graf--p graf-after--p">We have all the tools necessary to manipulate our project, consolidated to a single toolbar in Sigma.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*vYOg9_QwDNdkgY6hRsbxjQ.png" alt="image" /></div>Sigma toolbar<p class="graf graf--p graf-after--figure">Let’s go ahead and click on Save button to commit our project to Github.</p></div><div class="section-inner sectionLayout--fullWidth"><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*FEAz3m543I0Q4bJGOG_1iw.gif" alt="image" /></div>Sigma, silently doing it’s job for you</div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">Until now, we were building our serverless application in our browser by virtually creating resources(DynamoDB tables, API endpoints, Lambda functions). Now it is time to <strong class="markup--strong markup--p-strong">deploy </strong>our project in AWS.</p><h4 id="c04d" class="graf graf--h4 graf-after--p">Step 4 — Deploying the project in AWS</h4><p id="f8f5" class="graf graf--p graf-after--h4">In order to deploy the project to AWS, we just have to click on the deploy button in toolbar.</p><p class="graf graf--p graf-after--p">Sigma will then show you a list of changes, which are yet to be executed on your AWS account.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*ggdIBxbvlUXEF1W5buxPaw.png" alt="image" /></div>List of changes that are going to be done by Sigma on your AWS account<p class="graf graf--p graf-after--figure">You can even view the detailed log, while deployment is being executed.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*7lXQAa19ScfJc3efb8LkwQ.gif" alt="image" /></div>Deployment Logs<p id="e55c" class="graf graf--p graf-after--figure">Once deployment is completed, Sigma will show you a summary of the process.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*lwzED26h7zsWddTG8PmMhg.png" alt="image" /></div>Sigma deployment summary<p class="graf graf--p graf-after--figure">Sigma’s deployment summary even includes the URL of the deployed API gateway endpoint!!</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*r1ZBljVC0r977Qi97QE45Q.png" alt="image" /></div>URL of the deployed API gateway endpoint<p class="graf graf--p graf-after--figure">So we are done with the fist version of our serverless application. Our app is now live on cloud!!</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/0*vIsp59qaWSgMq_Jp.gif" alt="image" /></div>They just deployed a serverless application developed by modern approach (Sigma)<p class="graf graf--p graf-after--figure">Let me show you few more interesting things about Sigma.</p><h4 class="graf graf--h4 graf-after--p">Automatically importing/ injecting AWS libraries.</h4><p class="graf graf--p graf-after--h4">Let’s have a close look at our code.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*GrRV-1BTiTw6tA0VvoH8xg.png" alt="image" /></div>A close look at your code!<p class="graf graf--p graf-after--figure">Okay wait…. We never typed the top two lines of code.</p><p class="graf graf--p graf-after--p">Who did that? 😳</p><p id="f7aa" class="graf graf--p graf-after--p">Who added the imports for AWS library and created a DynamoDB document client for me?</p><p id="c6e5" class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Sigma does all of that for you!!</strong> Whenever you drag and drop a resource to code editor, Sigma automatically import required AWS libraries and create instances of respective resources.</p><h4 id="b2c0" class="graf graf--h4 graf-after--p">Adding 3rd party libraries</h4><p class="graf graf--p graf-after--h4">According to my use-case explained in <a href="https://medium.com/@cwidanage/going-serverless-with-amazon-web-services-aws-the-traditional-approach-fb45a7cc5dc2" class="markup--anchor markup--p-anchor" target="_blank">Going Serverless with Amazon Web Services (AWS) — The Traditional Approach</a>, we wanted to validate the incoming request before persisting with the help of a 3rd party library called <a href="https://validatejs.org/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank"><em class="markup--em markup--p-em">validate js</em></a>.</p><p id="e75c" class="graf graf--p graf-after--p">You can easily add dependencies to Sigma project with a matter of few clicks.</p></div><div class="section-inner sectionLayout--insetColumn"><p id="f44a" class="graf graf--p graf-after--figure">That’s it. Now you can use the newly added dependency in any JS file of your project!!!</p><p class="graf graf--p graf-after--p">That is just a brief introduction to the <strong class="markup--strong markup--p-strong">modern approach</strong> for serverless development.</p><h3 class="graf graf--h3 graf-after--p">Let’s turn back and see what are the pain points that we have actually solved in modern approach.</h3><h4 class="graf graf--h4 graf-after--h3">Changing the existing lambda code</h4><p class="graf graf--p graf-after--h4">Unlike in <a href="https://medium.com/@cwidanage/going-serverless-with-amazon-web-services-aws-the-traditional-approach-fb45a7cc5dc2" class="markup--anchor markup--p-anchor" target="_blank">traditional approach</a>, where you had to edit the local code and re upload the code bundle to AWS, with modern approach, you just do every thing in your browser, and re deploy whenever you need with a single mouse click.</p><h4 id="cc8a" class="graf graf--h4 graf-after--p">Adding 3rd party dependencies</h4><p class="graf graf--p graf-after--h4">Just, <strong class="markup--strong markup--p-strong">Click ⇒ Search ⇒ Click</strong> to add new dependencies to your project. No more,<em class="markup--em markup--p-em"> </em><strong class="markup--strong markup--p-strong">download ⇒ unzipping ⇒ <em class="markup--em markup--p-em">npm installs</em> ⇒ re zipping ⇒ uploading ⇒ click on Save </strong>to add libraries.</p><h4 class="graf graf--h4 graf-after--p"><strong class="markup--strong markup--h4-strong">Associating with more AWS resources</strong></h4><p id="bbdb" class="graf graf--p graf-after--h4">Remember how we had to update Lambda role, when we wanted to connect with new AWS resources. The <strong class="markup--strong markup--p-strong">modern approach</strong> automates that for you! . Sigma guarantees to attach just the necessary permissions to your lambda. Sigma knows best practices and it follows them for you 😊.</p><h4 class="graf graf--h4 graf-after--p">No more hours of your valuable time, spending on AWS docs</h4><p id="d108" class="graf graf--p graf-after--h4">Sigma generates API calls automatically for you. Sigma even import dependencies for you! Just fill some fields in the UI and forget the rest. Just worry about your application logic!</p><p class="graf graf--p graf-after--p">So this is the promise I made at the end of the post about traditional approach.</p><blockquote class="graf graf--blockquote graf-after--p graf--trailing"><div>Forget both <strong class="markup--strong markup--blockquote-strong">resource provisioning</strong> and <strong class="markup--strong markup--blockquote-strong">code </strong>and just focus on the <strong class="markup--strong markup--blockquote-strong">application logic</strong>.</div></blockquote></div>


