ãããžã§ã¯ããåçŽãªå Žåãç解ããã®ã¯ç°¡åã§ã...åçŽãªãããžã§ã¯ãã®éçºã¯ããã»ã©ç°¡åã§ã¯ãããŸããã æéãããããŸãã è€éãªããã°ã©ã ã®å Žåãæçµæ±ºå®ã¯èšå€§ãªéã®æ å ±ãåæããããšã«ãã£ãŠåŸãããŸãã ã³ãŒããé©åã«èšèšãããŠããã°ãä»ã®æ¹æ³ã§ã¯å®çŸã§ããªãã£ãããã«èŠããŸãããéäžçãªã¡ã³ã¿ã«ã¯ãŒã¯ïŒããã³å€§éã®ãªãã¡ã¯ã¿ãªã³ã°ïŒã®çµæãšããŠãã®åçŽããéæãããå¯èœæ§ããããŸãã ã·ã³ãã«ãªãã®ãäœãã®ã¯é£ããã§ãã ã³ãŒãã®æ§é ãæãããªå Žåã¯ãç°¡åã ãšã¯æããªãã§ãã ããã
ãã®ãããKISSã®èšèšååïŒã·ã³ãã«ã§ãããããããã®ã«ããïŒã¯ãã·ã³ãã«ãªã³ãŒããæãç解ãããããããã³ãŒãã®ã·ã³ãã«ããæãéèŠã§ãããšå®£èšããŠããŸãã
ã»ãšãã©ãã¹ãŠã®èšèšååã¯ãã³ãŒãã®æç床ãéæããããšãç®çãšããŠããŸãã èšèšååã«éåããããšã«ãããã³ãŒãã®ç解床ãäœäžããŸãã ç解ã§ããªãã³ãŒãã¯ãç解ãä¿®æ£ãé£ãããããã³ãŒããè€éã§ãããšèªåçã«æããããŸãã ãããã®ååã®ããããã«éåããå ŽåãKISSã®ååã«ãéåããŸãã ãããã£ãŠãKISSã«ã¯ä»ã®ã»ãšãã©ãã¹ãŠã®èšèšååãå«ãŸããŠãããšèšããŸãã
èšèšãã¿ãŒã³ã¯ãããã€ãã®åé¡ã«å¯ŸããŠæãæåããåçŽã§ãæ確ãªè§£æ±ºçã説æããŸãã ãã®ãã¿ãŒã³ã解決ããåé¡ããªããã¶ã€ã³ãã¿ãŒã³ã䜿çšãããšãKISSã«éåããã³ãŒãã«äžèŠãªè€éããçããŸãã ãã¿ãŒã³ã«å¯Ÿå¿ããåé¡ãããå Žæã§ãã¶ã€ã³ãã¿ãŒã³ã䜿çšããªãå Žåã¯ãKISSãååºŠç Žæããã³ãŒããè€éã«ãªããŸãã
ç§ã®æèŠã§ã¯ãKISSã®åå㯠ããã¶ã€ã³ã®åºæ¬ååãç¥ããªãããŸãã¯ç解ããŠããªãåå¿è ã®ãã¶ã€ããŒã«ã®ã¿æçšã§ã ã KISSã¯ãèšèšååãšãã¿ãŒã³ã®èª€çšããä¿è·ããŸãã ååãšãã¿ãŒã³ã¯ã³ãŒãã®ç解床ãé«ããããã«èšèšãããŠãããããããããé©åã«äœ¿çšããŠãã³ãŒãã®ç解床ãäœäžããããšã¯ãããŸããã ãã ããèšèšååã誀解ããŠããå ŽåïŒããšãã°ããäžèŠãªãšã³ãã£ãã£ãäœæããªããããã§ããéãå°ãªããšã³ãã£ãã£ãäœæããããšè§£éããïŒããŸãã¯1ã€ã®ååãéµå®ããä»ã®12ã®ååã«éåããå ŽåãKISSã¯ä¿¡é Œã§ãããšã¢ããã°ã«ãªããŸãã ãã以å€ã®å ŽåãKISSã¯ã»ãšãã©åœ¹ã«ç«ã¡ãŸããã 圌ã¯ããŸãã«ãäžè¬çãã€æœè±¡çã§ãã æ®ãã®ååã¯ããå ·äœçã§ãããã³ãŒãã®ãããããããšåçŽããå®çŸããããã®ããæ確ãªæ¹æ³ãå«ãŸããŠããŸãã
ãåçŽæ§ããªã©ã®æŠå¿µã«é¢ãã人ã ã®èãæ¹ã¯ããŸããŸã§ããå¯ââèœæ§ãããããã KISS-aã«é¢ãã次ã®èª€è§£ãåºãŸã£ãŠããŸãã
誀解1.åçŽãªã³ãŒããæãç°¡åã«èšè¿°ã§ããçš®é¡ã®ã³ãŒãã§ãããšæ³å®ããå ŽåãKISSã®ååã¯ãèšèšãèããã«é ã«æµ®ãã¶æåã®ãã®ãæžãããšã奚å±ããŠãããšè§£éã§ããŸãã
誀解2.åçŽãªã³ãŒãããæžãããã«ã§ããã ãç¥èãå¿ èŠãšããªããããªã³ãŒãã§ãããšä»®å®ããå ŽåãKISSã®ååã¯ãã¶ã€ã³ãã¿ãŒã³ã䜿çšããªãããšãæšå¥šããŠãããšè§£éã§ããŸãã
ãã®å ŽåãåçŽãã¯è€éã§ã¯ãªãã人工çã§ãªããæãèªç¶ã§ãé£ãããªããç解ãããããã®ãšããŠç解ãããã¹ãã§ãã
CïŒã®äŸ
ã¿ã¹ã¯ïŒå³åœ¢ã暪æãããšãã¯ããã®äº€å·®éšåãã·ã§ãŒãã£ã³ã°ããå¿ èŠããããŸãã
ããã§ãç°ãªãçµã¿åããã®ããã®æ®éçãªhatchåã¢ã«ãŽãªãºã ãéçºããæ¹æ³
圢ç¶ïŒé·æ¹åœ¢-é·æ¹åœ¢ãé·æ¹åœ¢-å€è§åœ¢ã
polygon-polygonãellipse-polygonãellipse-ellipseïŒããªã
é£ãããã»ãšãã©ã®å ŽåãããŸãå¹æçã§ã¯ãããŸããã
ãªãã·ã§ã³ã¯ç¬èªã®ã¢ã«ãŽãªãºã ã§ãã
æåã«æãæµ®ãã¶ã®ã¯æ¬¡ã®ãããªãã®ã§ãïŒ
ã³ãŒããå±é
public interface IShape { } public class Circle : IShape { } public class Rectangle : IShape { } public class RoundedRectangle : IShape { } public class IntersectionFinder { public IShape FindIntersection(IShape shape, IShape shape2) { if (shape is Circle && shape2 is Rectangle) return FindIntersection(shape as Circle, shape2 as Rectangle); if (shape is Circle && shape2 is RoundedRectangle) return FindIntersection(shape as Circle, shape2 as RoundedRectangle); if (shape is RoundedRectangle && shape2 is Rectangle) return FindIntersection(shape as RoundedRectangle, shape2 as Rectangle); return FindIntersection(shape2, shape); } private IShape FindIntersection(Circle circle, Rectangle rectangle) { return new RoundedRectangle(); // Rectangle Circle, . RoundedRectangle } private IShape FindIntersection(Circle circle, RoundedRectangle rounedeRectangle) { return new Circle(); } private IShape FindIntersection(RoundedRectangle roundedRectanglerectangle, Rectangle rectangle) { return new Rectangle(); } }
ãã ãããã®ã³ãŒãã¯ãåçŽãã®å®çŸ©ããã®2ã€ã®ãã€ã³ããã€ãŸãæãèªç¶ã§ç解ãããããã®ãšççŸããŠããŸãã 人工çãªã¯ã©ã¹IntersectionFinderããããããã³ãŒãã¯èªç¶ã§ã¯ãããŸããã ã³ãŒãã«æ £ããŠããªã人ã¯ã亀差ç¹èšç®é¢æ°ãå®è£ ãããŠãããã©ãããããã³ãã®äœ¿çšæ¹æ³ãç解ããããã«ãIShapeã䜿çšãããŠãããã¹ãŠã®å Žæã調ã¹ãå¿ èŠããããããã³ãŒããç解ããããã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããŸããã æ°äžïŒãŸãã¯æ°çŸïŒã®ã³ãŒãè¡ãæã€ãããžã§ã¯ãã§ã¯ãããã¯ç°¡åãªäœæ¥ã§ã¯ãªããããããŸããã IntersectionFinderã¯ã©ã¹ã§ã®äœæ¥ãé£ãããªããã1ã€ã®äžå¿«ãªç¬éããããŸããFindIntersectionãšããååã®é¢æ°ã®æ°ã¯ãæ°åã®æ°ããç®è¡çŽæ°ã®åœ¢ã§å¢å ããŸãããã®çµæãIntersectionFinderã¯ã©ã¹ã¯ãæéã®è·æ¥ã ãããã£ãŠãFindIntersectionãIShapeã«è»¢éããŸãã
ã³ãŒããå±é
public interface IShape { IShape FindIntersection(IShape shape); } public class Circle : IShape { public IShape FindIntersection(IShape shape) { if (shape is Rectangle) return FindIntersection(shape as Rectangle); if (shape is RoundedRectangle) return FindIntersection(shape as RoundedRectangle); return shape.FindIntersection(this); } private IShape FindIntersection(Rectangle rectangle) { return new RoundedRectangle();// Rectangle Circle, . RoundedRectangle } private IShape FindIntersection(RoundedRectangle rounedeRectangle) { return new Circle(); } } public class Rectangle : IShape { public IShape FindIntersection(IShape shape) { if (shape is RoundedRectangle) return FindIntersection(shape as RoundedRectangle); return shape.FindIntersection(this); } private IShape FindIntersection(RoundedRectangle roundedRectangle) { return new Rectangle(); } } public class RoundedRectangle : IShape { public IShape FindIntersection(IShape shape) { return shape.FindIntersection(this); } }
ããŠãä»ã§ã¯ã³ãŒãã«äžæ £ããªããã°ã©ããŒã¯ã2ã€ã®å³ã®å ±ééšåãäœæããããã«ãããžã§ã¯ããåé¿ããæ¹æ³ãæ¢ãå¿ èŠã¯ãããŸããã äžèŠãªãšã³ãã£ãã£ã亀差é»åããæ¶ããŸããã ã³ãŒããããèªç¶ã«ãªããç解ãããããªããŸãããã€ãŸããããã·ã³ãã«ã«ãªããŸããã ããã§ãæ°ããã¿ã€ãã®å³ãäœæãããšãã«ã以åã«äœæããã¯ã©ã¹ãå€æŽããå¿ èŠããªããªããŸãããã€ãŸããæ°ããã¿ã€ãã®å³ã®è¿œå ãç°¡çŽ åãããŸããã ç¹å®ã®äº€å·®æ€çŽ¢ã¢ã«ãŽãªãºã ãèŠã€ããã®ã¯ç°¡åã§ããåãååã®å€ãã®ã¡ãœããã®äžãã巚倧ãªã¯ã©ã¹ã§æ€çŽ¢ããå¿ èŠããªããªã£ãããã§ãã
ãããã亀差ç¹ãèšç®ããç¹å®ã®é¢æ°ãåŒã³åºãå¿ èŠããããã©ããã決å®ããæ¹æ³ã«ã¯ã人çºæ§ããªãããã§ã¯ãªãããšãããããŸããã ããèªç¶ãªã¢ãããŒãã¯ã次ã®ãšããã§ããFindIntersectionãšåŒã°ããé¢æ°ãåŒã³åºãããã®åŒæ°ã®åã¯2çªç®ã®å³ã®åãšäžèŽããŸãã
ã³ãŒããå±é
public class Shape { public Shape FindIntersection(Shape shape) { var method = MethodFinder.Find(this.GetType(), "FindIntersection", shape.GetType()); if (method != null) { return (Shape)method.Invoke(this, new[] { shape }); } return shape.FindIntersection(this); } } public class Circle : Shape { [UsedImplicitly] private Shape FindIntersection(Rectangle rectangle) { return new RoundedRectangle();// Rectangle Circle, . RoundedRectangle } [UsedImplicitly] private Shape FindIntersection(RoundedRectangle rounedeRectangle) { return new Circle(); } } public class Rectangle : Shape { [UsedImplicitly] private Shape FindIntersection(RoundedRectangle roundedRectangle) { return new Rectangle(); } } public class RoundedRectangle : Shape { } public static class MethodFinder { public static MethodInfo Find(Type classType, string functionName, Type parameterType) { return classType.GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public) .FirstOrDefault( x => x.Name == functionName && x.GetParameters().Count() == 1 && x.GetParameters().First().ParameterType == parameterType); } } class Program { static void Main(string[] args) { Shape shape = new Rectangle(); var shapeIntersection = shape.FindIntersection(new Circle()); Console.WriteLine(shapeIntersection.GetType()); } }
ã芧ã®ããã«ããããªãã¯IShape FindIntersectionïŒIShapeã·ã§ã€ãïŒã¡ãœããã¯ãå³ã®åå ·äœçãªã¯ã©ã¹ããæ¶ããŠãããã³ãŒãã®åèšè¡æ°ãåæžãããŠããŸãã æ°ããã¿ã€ãã®åœ¢ç¶ã®è¿œå ãããã«ç°¡åã«ãªããŸããã FindIntersectionïŒShape shapeïŒã¡ãœããã¯çŸåšãåºæ¬ã¯ã©ã¹ã«ãããããã·ã³ãã«ã§èªç¶ã«èŠããŸãïŒ å®£èšç ïŒã æ°ããMethodFinderã¯ã©ã¹ãè¿œå ãããŸããããããã°ã©ãã¯ãã®å éšæ§é ãç¥ãå¿ èŠã¯ãããŸããã æ確ãªã€ã³ã¿ãŒãã§ãŒã¹ãæã¡ããµããžã§ã¯ãé åã®æŠå¿µãå®è£ ããŠããŸããïŒã€ãŸããå€æŽã®çç±ã¯ã»ãšãã©ãªãããšãæå³ããŸãïŒããããã£ãŠãè¿œå ãããã³ãŒãã®è€éãã¯å®éã«ã¯å¢å ããŸããã§ããã
ããã§ã¯ããªãã¬ã¯ã·ã§ã³ã¯é ããã®ã§ãããšèããããå éã®ããã«ãããšãã°ãExpressionTreeã䜿çšããŠåçã«åœ¢æãããããªã²ãŒãããã£ãã·ã¥ã§ããŸãããKISSã¯ã§ããã ãåçŽãªã³ãŒããèšè¿°ããããšããå§ãããŸãããã®ãããFindIntersectionã¡ãœãããé«éã«ãªããŸã§ãã®èãã¯æ§ããŠãã ããïŒåœ¢ç¶ïŒã¯ãå®éã«ã¯ããã°ã©ã ã®ããã«ããã¯ã«ã¯ãªããããŠãŒã¶ãŒã«åé¡ããããããŸãã ãããã延æããŠã¯ãªããªãã®ã¯ããªãã¬ã¯ã·ã§ã³ãéããŠShapeã¯ã©ã¹ã®ãã¹ãŠã®åå«ãèªèããããã°ã©ããŒããã¹ãŠã®å³åœ¢ã®ãã¢ã«å¯ŸããŠäº€å·®æ€çŽ¢ã¢ã«ãŽãªãºã ãå®è£ ããããšãå¿ããŠããªãããšãæ€èšŒããåäœãã¹ãã®äœæã§ãã
ãã¹ãã³ãŒãã衚瀺
[TestFixture] public class ShapeTest { [Test] public void AllIntersectsMustBeRealized() { var shapeTypes = typeof(Shape).Assembly.GetTypes().Where(x => x.IsSubclassOf(typeof (Shape))); var errorMessages = new List<string>(); foreach (var firstType in shapeTypes) foreach (var secondType in shapeTypes) { if (MethodFinder.Find(firstType, "FindIntersection", secondType) == null) { errorMessages.Add(string.Format(" : {0} {1}", firstType.Name, secondType.Name)); } } if (errorMessages.Any()) throw new Exception(string.Join("\r\n", errorMessages)); } }
æåã®äŸãš3çªç®ã®äŸãèŠããšã3çªç®ã®äŸã®ã»ããç°¡åãªããšã¯æããã§ã¯ãªããããããŸããã ããããæ°åã®ã¿ã€ãã3ã§ã¯ãªã30ã§ãããšæ³åããŠã¿ãŸãããããã®åŸãæ°åæ¯èŒé¢æ°ã®æ°ã¯465ïŒç®è¡çé²è¡ã®åèšïŒ1 + 30ïŒ* 30 \ 2ïŒã§ãã æåã®ã±ãŒã¹ã§ã¯ãå¿ èŠãªé¢æ°ãéžæããããã®ã¡ã«ããºã ã465 ifsïŒãŸãã¯ã代ããã«ã¡ãœãããžã®465ãã€ã³ã¿ãæã€ã³ã³ããã®èåŸã«ãããŸãããããŸãè¯ãã¯ãããŸããïŒãšããã®ifã®å±±ã®äžã§ãã³ãŒãã«äžæ £ããªããã°ã©ããŒãé ããŸãç¹å®ã®ã·ã¹ãã ã äžæ¹ã3çªç®ã®ã±ãŒã¹ã§ã¯ãã¢ãããŒãã¯å®£èšçã§ãããæ°åã®çš®é¡ã®æ°ã«äŸåããŸããã ãã®äŸã¯ãããã°ã©ããŒã®å€§éšåã3çªç®ã®äŸãæªã決å®ã§ãããšèãããããããªããšããç¹ã§åªããŠããŸãããªããªãããªãã¬ã¯ã·ã§ã³ã䜿çšããŠãã©ã€ããŒãå€æ°ïŒããã°ã©ããŒã®äžçš®ã®ã¿ããŒïŒã«ã¢ã¯ã»ã¹ããããã§ãããã®ãããªç®çã®ããã®åçã¯æªãã§ããã圌ãã¯ãªããããæªãã®ã説æã§ããŸããã ãã®å¿ççŸè±¡ã¯åºå®å€ãšåŒã°ããŸãã
åºå®å€ã®çŸè±¡ã«ã€ããŠåŠã¶
ãã®çŸè±¡ã®èª¬æã¯ã ããã°ã©ããŒçä¿¡è
ã®ãã£ãã»ãã¡ãŠã©ãŒã®æ¬ããåŒçšãããŠããããµã«ãæãŸããäŸã«ãã£ãŠå®èšŒãããŠããŸãã
ãµã«ãé·å¹Žå«ããããããŠããåã€ã³ãã®äœæ°ã¯ã圌ããæãŸããããã®ç¬èªã®æ¹æ³ãèãåºããŸããã 圌ãã¯å°é¢ã«æ·±ãçãç©Žãæããåãé·ãã®çŽ°ãç©äœã§ç©Žã®åºãåºããŸããã ãã®åŸãç©Žã®åºã®åºãéšåã«ã飯ã泚ããŸããã ãµã«ã¯é£ã¹ãã®ã倧奜ãã§ãã å®éã圌ãããšãŠãé¢åãªã®ã¯äž»ã«ãã®ããã§ãã 圌ãã¯è»ã«é£ã³ä¹ã£ããã倧å¢ã®äººã ãé§ãæããŠããªãã®æããé£ã¹ç©ã奪ãåããªã¹ã¯ãåããŸãã åã€ã³ãã®äººã ã¯ãããããèªèããŠããŸãã ïŒä¿¡ããŠãã ãããå ¬åã®çãäžã«ç«ã£ãŠãããšãçªç¶ãéãé床ã§ãµã«ãäœããã€ããããã«èµ°ãåºããŠããã®ã¯ãšãŠãäžå¿«ã§ããïŒããã§ãç¿ãçŸããŠãç±³ãèŠã€ããŠãç©Žã«æãå ¥ããŸããã 圌ãã®æã¯äžã«ãããŸããã 圌ãã¯ç±å¿ã«å¯èœãªéãå€ãã®ç±³ãã€ãã¿ãåŸã ã«æãæ¡ããã¶ãã«ããŸããã æ³ã¯ç©Žã®åºãéšåã®äœç©ãå ããäžéšã¯éåžžã«çããããç¿ã¯æ³ãæ¡ãããšãã§ããŸããã§ããã ãããŠéã蟌ããããŸããã ãã¡ããã圌ãã¯ãã é£ã¹ç©ããããããŠãåºããšã©ãŸãããšãã§ããŸããã ãããããµã«ã¯é£ç©ãéåžžã«éèŠèŠããŠããŸãã å®éãé£ç©ã¯åœŒãã«ãšã£ãŠéåžžã«éèŠã§ãããããé£ç©ãæåŠããããšã匷å¶ããããšã¯ã§ããŸããã 圌ãã¯å°é¢ããåŒãåºããããæ»ã¬ãŸã§ç±³ãçµã£ãŠãåŒãåºãããšããŸãã éåžžã2çªç®ã®æ¹ãå ã«æ¥ãŸããã 䟡å€ã®åºå®ãšã¯ã客芳çã«çãããšãã§ããªãã»ã©åŒ·åãªäœãã®éèŠæ§ãä¿¡ãããšãã§ãã ç¿ã¯ç±³ãéåžžã«é«ãã©ã³ã¯ä»ãããã®ã§ãç±³ãšæ»ã®å人ã®éã§éžæããªããã°ãªããªããšãã圌ãã¯ä»ç±³ã倱ãæ¹ãè¯ãããšãç解ã§ããŸããã æŽå²ã¯ç¿ãéåžžã«æãã«ããŸãããç§ãã¡ã®ã»ãšãã©ã¯ç±³ã«çžåœããŸãã 第äžäžçã®åœã ã®åäŸãã¡ãé£ç©ã§é£¢ããããã®ãå©ããããšãè¯ããã©ããå°ãããããªããããªãã¯ãã¶ããã¯ãããšçããã§ãããã 誰ããããªãã®èŠç¹ã«ææŠããããšããå Žåãããªãã¯åœŒããããããšæ±ºããã§ãããã ããã¯åºå®å€ã®äŸã§ãã ããªãã¯äœããéåžžã«åŒ·ã確信ããŠããã®ã§ããããä¿¡ããããšãã§ããªãæ¹æ³ãæ³åããããšã¯ã§ããŸããã ãã®å Žåãåºå®å€ã¯ããªãã¬ã¯ã·ã§ã³ã䜿çšããŠãã©ã€ããŒãã¡ãœããã«ã¢ã¯ã»ã¹ããã®ãæªããšãã信念ã§ãã
ãµã«ãé·å¹Žå«ããããããŠããåã€ã³ãã®äœæ°ã¯ã圌ããæãŸããããã®ç¬èªã®æ¹æ³ãèãåºããŸããã 圌ãã¯å°é¢ã«æ·±ãçãç©Žãæããåãé·ãã®çŽ°ãç©äœã§ç©Žã®åºãåºããŸããã ãã®åŸãç©Žã®åºã®åºãéšåã«ã飯ã泚ããŸããã ãµã«ã¯é£ã¹ãã®ã倧奜ãã§ãã å®éã圌ãããšãŠãé¢åãªã®ã¯äž»ã«ãã®ããã§ãã 圌ãã¯è»ã«é£ã³ä¹ã£ããã倧å¢ã®äººã ãé§ãæããŠããªãã®æããé£ã¹ç©ã奪ãåããªã¹ã¯ãåããŸãã åã€ã³ãã®äººã ã¯ãããããèªèããŠããŸãã ïŒä¿¡ããŠãã ãããå ¬åã®çãäžã«ç«ã£ãŠãããšãçªç¶ãéãé床ã§ãµã«ãäœããã€ããããã«èµ°ãåºããŠããã®ã¯ãšãŠãäžå¿«ã§ããïŒããã§ãç¿ãçŸããŠãç±³ãèŠã€ããŠãç©Žã«æãå ¥ããŸããã 圌ãã®æã¯äžã«ãããŸããã 圌ãã¯ç±å¿ã«å¯èœãªéãå€ãã®ç±³ãã€ãã¿ãåŸã ã«æãæ¡ããã¶ãã«ããŸããã æ³ã¯ç©Žã®åºãéšåã®äœç©ãå ããäžéšã¯éåžžã«çããããç¿ã¯æ³ãæ¡ãããšãã§ããŸããã§ããã ãããŠéã蟌ããããŸããã ãã¡ããã圌ãã¯ãã é£ã¹ç©ããããããŠãåºããšã©ãŸãããšãã§ããŸããã ãããããµã«ã¯é£ç©ãéåžžã«éèŠèŠããŠããŸãã å®éãé£ç©ã¯åœŒãã«ãšã£ãŠéåžžã«éèŠã§ãããããé£ç©ãæåŠããããšã匷å¶ããããšã¯ã§ããŸããã 圌ãã¯å°é¢ããåŒãåºããããæ»ã¬ãŸã§ç±³ãçµã£ãŠãåŒãåºãããšããŸãã éåžžã2çªç®ã®æ¹ãå ã«æ¥ãŸããã 䟡å€ã®åºå®ãšã¯ã客芳çã«çãããšãã§ããªãã»ã©åŒ·åãªäœãã®éèŠæ§ãä¿¡ãããšãã§ãã ç¿ã¯ç±³ãéåžžã«é«ãã©ã³ã¯ä»ãããã®ã§ãç±³ãšæ»ã®å人ã®éã§éžæããªããã°ãªããªããšãã圌ãã¯ä»ç±³ã倱ãæ¹ãè¯ãããšãç解ã§ããŸããã æŽå²ã¯ç¿ãéåžžã«æãã«ããŸãããç§ãã¡ã®ã»ãšãã©ã¯ç±³ã«çžåœããŸãã 第äžäžçã®åœã ã®åäŸãã¡ãé£ç©ã§é£¢ããããã®ãå©ããããšãè¯ããã©ããå°ãããããªããããªãã¯ãã¶ããã¯ãããšçããã§ãããã 誰ããããªãã®èŠç¹ã«ææŠããããšããå Žåãããªãã¯åœŒããããããšæ±ºããã§ãããã ããã¯åºå®å€ã®äŸã§ãã ããªãã¯äœããéåžžã«åŒ·ã確信ããŠããã®ã§ããããä¿¡ããããšãã§ããªãæ¹æ³ãæ³åããããšã¯ã§ããŸããã ãã®å Žåãåºå®å€ã¯ããªãã¬ã¯ã·ã§ã³ã䜿çšããŠãã©ã€ããŒãã¡ãœããã«ã¢ã¯ã»ã¹ããã®ãæªããšãã信念ã§ãã
ãã®å Žåããªãã¬ã¯ã·ã§ã³ã䜿çšããŠãã©ã€ããŒãã¡ãœããã«ã¢ã¯ã»ã¹ããã®ã¯ãªãç ç²ã§ã¯ãªãã®ãã調ã¹ãŠãã ããã
å®éãã¡ãœããã宣èšãããŠããããŒã¿åã®å€éšã§ãã©ã€ããŒãã¡ãœãããåŒã³åºãããšã¯ãã«ãã»ã«åéåã§ãã ãã ãããããã©ãã»ã©é©ãã¹ãããšã«èãããŠãããã®äŸã§ã¯ãã«ãã»ã«åã¯å£ããŠããŸããã æŠå¿µçã«ã¯ã芪ã¯ã©ã¹ãšåå«ã¯ã©ã¹ã¯åãããŒã¿åã§ãã 芪ã¯ãå€çããã«ãã»ã«åããã芪ã³ãŒããçžç¶äººã§åŒã³åºãããšãã§ãïŒä¿è·ïŒã芪ã¯çžç¶äººã®ã«ãã»ã«åãããã¡ãœãããåŒã³åºãããšãã§ããŸãïŒä¿è·ãããä»®æ³ïŒã çžç¶äººã¯ã©ã¹ã®ãå
éšããæãäžãããšãå¿
ç¶çã«èŠªã¯ã©ã¹ã®å
éšæ§é ã調ã¹ãå¿
èŠãããã芪ãé çªã«èŠªãæã£ãŠããå Žåããã®å
éšæ§é ã調ã¹ãå¿
èŠããããŸãã å€ãã®éçºè
ã¯ãã®æ©èœãèªèããŠãããç¶æ¿ã®ä»£ããã«æ§æã䜿çšããããšã奜ã¿ãŸãïŒç¶æ³ã«ããèš±å¯ãããå ŽåïŒã
ãã®äŸã¯ãKISSã䜿çšããŠã³ãŒããç°¡çŽ åããããšãããšãç¹å®ã®ååãã¿ããŒã®èª€ã£ãç解ããéçºè ã®æå³ãå®å šã«åæ ãã宣èšã³ãŒãã®ä»£ããã«ãæŸèæãã䜿çšããããã«æ瀺ããå Žåã§ããåé¡ã®ããè¯ã解決çã«å°éããæ¹æ³ã瀺ããŠããŸãã
å°ãæŽå²ã
KISSã®ååã¯ãèªç©ºæ©ç£æ¥ã«ç±æ¥ããæŽå²çã«ãåçŽã«æãã«ããŠããããšèš³ãããŠããããåçŽã«æãã«ãããã®ç¥ã§ãã èªç©ºæ©è£œé ã®æŽå²ã§ã¯ãæ©äœã®éããèšç®ããããã®ããã倧ãããªããé£è¡æ©ãåã«é¢éžã§ããªãã£ããããé£è¡æ©ã®æŠéåãé«ããããã«é£è¡æ©ã«äœåãªé§ã®ãã¬ãŒããéä»ãã«ããåŽåè ãå€ãããå Žåãç¥ãããŠããŸãã ããã«ãå€ãã®åŽåè ã®ã¹ãã«ã¯äœãã£ãã ãã®ãããªæ¡ä»¶äžã§ã¯ãé ã£ã±ãã£ãæªçãªåŽåè ããããšãããšã圌ãæãã§ãããšããŠãã誀ã£ãŠçµã¿ç«ãŠãããšãã§ããªããšããèªç©ºæ©ã®èšèšã¯ãç¹å¥ãªäŸ¡å€ããããŸããã ãã®åœæã®èšèšæ±ºå®ã®åé¿ã®1ã€ã¯ãæ··åããŠã³ã³ãã¥ãŒã¿ã®ãœã±ããã«ééã£ããã©ã°ãå·®ã蟌ããªãããšã§ããã ãã ãããšã¢ãšã³ãžãã¢ã®äœæ¥ã®çµæãå³é¢ã§ããã補åãäœæãããå Žåãããã°ã©ããŒã®å Žåã補åã¯å³é¢ãã®ãã®ã§ãïŒå ·è±¡çã«ïŒã ããã°ã©ããŒã®å Žåã圌ã¯ãé ã£ãæªçãªããã°ã©ããŒããå€æŽãããããžãã¹èŠä»¶ã«å¿ããŠå€æŽãå ããããšãã§ããããã«ã³ãŒããæžãå¿ èŠããããŸãïŒã€ãŸããå³é¢ãå€æŽããé£è¡æ©ãçµã¿ç«ãŠãŸããïŒã èªç©ºæ©æ¥çãšããã°ã©ãã³ã°ã®ä»æ§ã®éãã«ãããèªç©ºæ©æ¥çã«é©ãããã·ã³ãã«ã«ä¿ã€ããã³ãŒãã¯ãããã°ã©ããŒã®ååã®æ¬è³ªãåæ ããªããªããŸããã å€ãã®æ programmerãªããã°ã©ããŒã¯ããã€ãã£ãªã ãç°¡åã«ããããããã¶ã€ã³ãæ°ã«ããªãããšè§£éããŸãïŒããšãã°ããã®èšäºã®KISSååã®èª¬æããã®èª¬æãšæ¯èŒããŠãã ããïŒã 幞ããªããšã«ãKISSã«ã¯ä»ã«ãããã€ãã®åŸ©å·åæ©èœããããŸãã ããã®ãã¡ã®1ã€ã¯ãããã°ã©ãã³ã°ã«ãããKISSã®æ¬è³ªãæãããåæ ããŠããŸãã åçŽæå¿«ãšã¯ãåçŽã§ãæ£çŽã§ãççŽã§ãççŽãªãã®ã§ãã ãããã£ãŠããã·ã³ãã«ã§ãããããããã®ã«ãããã¯ããã·ã³ãã«ã§ãããããããã®ã«ããããšèªç±ã«ç¿»èš³ã§ãã宣èšæ§ãå®çŸããã«ã¯ãã¶ã€ã³ãå¿ èŠã§ãã
ãã®äŸã§ã¯ã Hokumã«æè¬ããŸããHokum㯠ããã®äŸã®æåã®ã¢ã€ãã¢ãæäŸããŠãããŸããã