\n\u003Ctask:annotation-driven executor=\"myExecutor\" scheduler=\"myScheduler\" />\n\u003Ctask:executor id=\"myExecutor\" pool-size=\"5\" />\n\u003Ctask:scheduler id=\"myScheduler\" pool-size=\"10\" />\n","xml",[488,3686,3687,3692,3697,3702],{"__ignoreMap":38},[493,3688,3689],{"class":885,"line":886},[493,3690,3691],{},"\u003Cbean id=\"myClass\" class=\"my.project.path.myClass\" />\n",[493,3693,3694],{"class":885,"line":197},[493,3695,3696],{},"\u003Ctask:annotation-driven executor=\"myExecutor\" scheduler=\"myScheduler\" />\n",[493,3698,3699],{"class":885,"line":200},[493,3700,3701],{},"\u003Ctask:executor id=\"myExecutor\" pool-size=\"5\" />\n",[493,3703,3704],{"class":885,"line":911},[493,3705,3706],{},"\u003Ctask:scheduler id=\"myScheduler\" pool-size=\"10\" />\n",[56,3708,3710],{"id":3709},"the-scheduled-annotation","The @Scheduled annotation",[19,3712,3713],{},"With the @Scheduled annotation you can execute your method as a cron job. Using this annotation requires that the method\nto be scheduled must be of type void and must not expect any arguments. The following examples show you how to use the\n@Scheduled annotation.",[19,3715,3716],{},"If you want periodic scheduling you can use the property fixedRate. In this example the method would be executed every\n42 seconds.",[876,3718,3722],{"className":3719,"code":3720,"language":3721,"meta":38,"style":38},"language-java shiki shiki-themes github-light github-dark","@Scheduled(fixedRate = 42000)\npublic void execute() {\n // do something\n}\n","java",[488,3723,3724,3729,3734,3739],{"__ignoreMap":38},[493,3725,3726],{"class":885,"line":886},[493,3727,3728],{},"@Scheduled(fixedRate = 42000)\n",[493,3730,3731],{"class":885,"line":197},[493,3732,3733],{},"public void execute() {\n",[493,3735,3736],{"class":885,"line":200},[493,3737,3738],{}," // do something\n",[493,3740,3741],{"class":885,"line":911},[493,3742,3250],{},[19,3744,3745],{},"If you prefer cron expressions you can use them either. The following example is analogue to the example above only\nusing cron expressions. The annotated method would be executed each full minute and every 7 seconds.",[876,3747,3749],{"className":3719,"code":3748,"language":3721,"meta":38,"style":38},"@Scheduled(cron = \"*/7 * * * * *\")\npublic void execute() {\n // do something\n}\n",[488,3750,3751,3756,3760,3764],{"__ignoreMap":38},[493,3752,3753],{"class":885,"line":886},[493,3754,3755],{},"@Scheduled(cron = \"*/7 * * * * *\")\n",[493,3757,3758],{"class":885,"line":197},[493,3759,3733],{},[493,3761,3762],{"class":885,"line":200},[493,3763,3738],{},[493,3765,3766],{"class":885,"line":911},[493,3767,3250],{},[19,3769,3770],{},"Without question you have much more possibilities with cron expressions than with periodic scheduling. In this example\nyour method would be executed every weekday (Monday to Friday) on 9.45 am.",[876,3772,3774],{"className":3719,"code":3773,"language":3721,"meta":38,"style":38},"@Scheduled(cron = \"0 45 9 * * MON-FRI\")\npublic void execute() {\n // do something\n}\n",[488,3775,3776,3781,3785,3789],{"__ignoreMap":38},[493,3777,3778],{"class":885,"line":886},[493,3779,3780],{},"@Scheduled(cron = \"0 45 9 * * MON-FRI\")\n",[493,3782,3783],{"class":885,"line":197},[493,3784,3733],{},[493,3786,3787],{"class":885,"line":200},[493,3788,3738],{},[493,3790,3791],{"class":885,"line":911},[493,3792,3250],{},[19,3794,3795],{},"A pretty cool feature is that you even can use placeholders for your cron expression which are resolved against the\nconfigured property-placeholder.",[876,3797,3799],{"className":3719,"code":3798,"language":3721,"meta":38,"style":38},"@Scheduled(cron = \"${myclass.cron.execute.sth}\")\npublic void execute() {\n // do something\n}\n",[488,3800,3801,3806,3810,3814],{"__ignoreMap":38},[493,3802,3803],{"class":885,"line":886},[493,3804,3805],{},"@Scheduled(cron = \"${myclass.cron.execute.sth}\")\n",[493,3807,3808],{"class":885,"line":197},[493,3809,3733],{},[493,3811,3812],{"class":885,"line":200},[493,3813,3738],{},[493,3815,3816],{"class":885,"line":911},[493,3817,3250],{},[19,3819,3820],{},"Define where the properties are loaded from within your application context:",[876,3822,3824],{"className":3682,"code":3823,"language":3684,"meta":38,"style":38},"\u003Ccontext:property-placeholder location=\"classpath:application.properties\"/>\n",[488,3825,3826],{"__ignoreMap":38},[493,3827,3828],{"class":885,"line":886},[493,3829,3823],{},[19,3831,3832],{},"Then the properties are loaded from the file which contains your cron-expressions like this:",[876,3834,3836],{"className":1011,"code":3835,"language":1013,"meta":38,"style":38},"myclass.cron.execute.sth=0 45 9 * * MON-FRI\n",[488,3837,3838],{"__ignoreMap":38},[493,3839,3840],{"class":885,"line":886},[493,3841,3835],{},[56,3843,3845],{"id":3844},"the-async-annotation","The @Async annotation",[19,3847,3848],{},"The @Async annotation allows you to invoke your method asynchronously. The execution of the method will occur in a task\nthat has been submitted to the TaskExecutor defined in your application context. Contrary to the methods annotated with\nthe @Scheduled annotations the methods you annotate with @Async may be of other type than void and can expect arguments.",[19,3850,3851],{},"This is a simple example of a @Async annotated method without a return value.",[876,3853,3855],{"className":3719,"code":3854,"language":3721,"meta":38,"style":38},"@Async\nvoid execute(String string) {\n // do something asynchronously\n}\n",[488,3856,3857,3862,3867,3872],{"__ignoreMap":38},[493,3858,3859],{"class":885,"line":886},[493,3860,3861],{},"@Async\n",[493,3863,3864],{"class":885,"line":197},[493,3865,3866],{},"void execute(String string) {\n",[493,3868,3869],{"class":885,"line":200},[493,3870,3871],{}," // do something asynchronously\n",[493,3873,3874],{"class":885,"line":911},[493,3875,3250],{},[19,3877,3878],{},"Like mentioned above your @Async annotated method may have a return value. However this return value must be of type\nFuture. This means that first the other tasks are performed and then is called get() on that Future.",[876,3880,3882],{"className":3719,"code":3881,"language":3721,"meta":38,"style":38},"@Async\nFuture\u003CString> execute(String string) {\n // do something asynchronously\n}\n",[488,3883,3884,3888,3893,3897],{"__ignoreMap":38},[493,3885,3886],{"class":885,"line":886},[493,3887,3861],{},[493,3889,3890],{"class":885,"line":197},[493,3891,3892],{},"Future\u003CString> execute(String string) {\n",[493,3894,3895],{"class":885,"line":200},[493,3896,3871],{},[493,3898,3899],{"class":885,"line":911},[493,3900,3250],{},[56,3902,3904],{"id":3903},"further-information","Further information",[19,3906,3907,3908],{},"Have a look at\nthe ",[80,3909,3912],{"href":3910,"rel":3911},"http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#scheduling",[84],"Spring Framework Reference Documentation",[2942,3914,3522],{},{"title":38,"searchDepth":197,"depth":197,"links":3916},[3917,3918,3919,3920],{"id":3675,"depth":200,"text":3676},{"id":3709,"depth":200,"text":3710},{"id":3844,"depth":200,"text":3845},{"id":3903,"depth":200,"text":3904},[206,2964],"2012-06-13T15:49:15","You want to execute cron jobs or call your methods asynchronously? Thanks to Spring’s annotation support for scheduling\\nand asynchronous execution you can achieve this in a few minutes.","https://synyx.de/blog/scheduling-and-asynchronous-execution-with-spring/",{},"/blog/scheduling-and-asynchronous-execution-with-spring",{"title":3663,"description":3672},"blog/scheduling-and-asynchronous-execution-with-spring",[3930,3931,3932,3933,3934,3935],"async","scheduled","asynchronous","scheduling","spring","spring-annotations","You want to execute cron jobs or call your methods asynchronously? Thanks to Spring’s annotation support for scheduling and asynchronous execution you can achieve this in a few minutes. Some…","fzW4lb1yw0kNbXB83aAmQzrzjrslpT-gtiBvUzbdR7Q",{"id":3939,"title":3940,"author":3941,"body":3942,"category":4595,"date":4596,"description":4597,"extension":209,"link":4598,"meta":4599,"navigation":212,"path":4600,"seo":4601,"slug":3946,"stem":4602,"tags":4603,"teaser":4611,"__hash__":4612},"blog/blog/how-to-monitor-and-manage-your-java-application-with-jmx.md","How to monitor and manage your Java application with JMX",[470],{"type":12,"value":3943,"toc":4588},[3944,3947,3950,3965,4041,4044,4048,4051,4141,4144,4151,4155,4169,4174,4179,4202,4205,4210,4215,4239,4242,4265,4270,4275,4299,4305,4344,4353,4357,4360,4365,4368,4374,4379,4382,4388,4391,4394,4428,4431,4481,4485,4488,4491,4552,4555,4559,4565,4572,4579,4586],[15,3945,3940],{"id":3946},"how-to-monitor-and-manage-your-java-application-with-jmx",[19,3948,3949],{},"JMX (Java Management Extensions) provides the infrastructure to support monitoring and management of your Java\napplications. Resources you manage with JMX are called Managed Beans (MBeans). I want to show you how to quickly\nregister your own Service as MBean using Spring and Source-Level Metadata (JDK 5.0+ annotations).",[19,3951,3952,3953,3956,3957,3960,3961,3964],{},"The following sample is built on a tool that allows to manage the staffs’ applications for vacation digitally instead of\nusing paper. If a staff member applies for leave, the application gets the status ",[26,3954,3955],{},"waiting",". Then an authorized person (\nthe boss) has to decide about this application. It may be set to ",[26,3958,3959],{},"allowed"," or to ",[26,3962,3963],{},"rejected",". It might be that you want\nto have an overview of the applications and their status and you may even want to remind the authorized persons via\nemail to review the pending applications. Even if the vacation management tool has a web-based frontend for doing the\nmost of the actions, I think it still makes a good example for describing how to use JMX in your Java application. The\nfollowing class is a skeleton of the class which shall be exposed to JMX as MBean.",[876,3966,3968],{"className":3719,"code":3967,"language":3721,"meta":38,"style":38},"public class JmxDemo {\n private long numberOfWaitingApplications;\n public long getNumberOfWaitingApplications() {\n return numberOfWaitingApplications;\n }\n public long countApplicationsInStatus(String status) {\n // do something and return number of applications with the given status\n }\n public List\u003CString> showWaitingApplications() {\n // do something and return a list of all waiting applications\n }\n public String remindBossAboutWaitingApplications() {\n // remind the boss via email to decide about the waiting applications\n }\n}\n",[488,3969,3970,3975,3980,3985,3990,3995,4000,4005,4009,4014,4019,4023,4028,4033,4037],{"__ignoreMap":38},[493,3971,3972],{"class":885,"line":886},[493,3973,3974],{},"public class JmxDemo {\n",[493,3976,3977],{"class":885,"line":197},[493,3978,3979],{}," private long numberOfWaitingApplications;\n",[493,3981,3982],{"class":885,"line":200},[493,3983,3984],{}," public long getNumberOfWaitingApplications() {\n",[493,3986,3987],{"class":885,"line":911},[493,3988,3989],{}," return numberOfWaitingApplications;\n",[493,3991,3992],{"class":885,"line":966},[493,3993,3994],{}," }\n",[493,3996,3997],{"class":885,"line":972},[493,3998,3999],{}," public long countApplicationsInStatus(String status) {\n",[493,4001,4002],{"class":885,"line":982},[493,4003,4004],{}," // do something and return number of applications with the given status\n",[493,4006,4007],{"class":885,"line":1116},[493,4008,3994],{},[493,4010,4011],{"class":885,"line":1127},[493,4012,4013],{}," public List\u003CString> showWaitingApplications() {\n",[493,4015,4016],{"class":885,"line":1133},[493,4017,4018],{}," // do something and return a list of all waiting applications\n",[493,4020,4021],{"class":885,"line":1139},[493,4022,3994],{},[493,4024,4025],{"class":885,"line":1154},[493,4026,4027],{}," public String remindBossAboutWaitingApplications() {\n",[493,4029,4030],{"class":885,"line":1160},[493,4031,4032],{}," // remind the boss via email to decide about the waiting applications\n",[493,4034,4035],{"class":885,"line":1166},[493,4036,3994],{},[493,4038,4039],{"class":885,"line":1172},[493,4040,3250],{},[19,4042,4043],{},"If you want to use this class as a MBean, a few steps are necessary.",[56,4045,4047],{"id":4046},"_1-not-yet-another-xml-file","1. Not yet another xml file…",[19,4049,4050],{},"It’s best you create an extra xml file (let’s call it jmxContext.xml) for JMX configuration and import it in your\napplicationContext.xml. In your jmxContext.xml you define your MBean and the MBeanExporter.",[876,4052,4054],{"className":3682,"code":4053,"language":3684,"meta":38,"style":38},"\n\u003Cbean id=\"jmxDemo\" class=\"org.synyx.urlaubsverwaltung.jmx.JmxDemo\">\n \u003C!-- maybe you need contructor-injection -->\n \u003C!-- \u003Cconstructor-arg ref=\"myService\" /> -->\n\u003C/bean>\n \u003C!-- you may just copy the following lines -->\n\u003Cbean id=\"exporter\" class=\"org.springframework.jmx.export.MBeanExporter\" lazy-init=\"false\">\n\u003Cproperty name=\"autodetect\" value=\"true\"/>\n\u003Cproperty name=\"namingStrategy\" ref=\"namingStrategy\"/>\n\u003Cproperty name=\"assembler\" ref=\"assembler\"/>\n\u003C/bean>\n\u003Cbean id=\"jmxAttributeSource\" class=\"org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource\"/>\n\u003Cbean id=\"assembler\" class=\"org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler\">\n\u003Cproperty name=\"attributeSource\" ref=\"jmxAttributeSource\"/>\n\u003C/bean>\n\u003Cbean id=\"namingStrategy\" class=\"org.springframework.jmx.export.naming.MetadataNamingStrategy\">\n\u003Cproperty name=\"attributeSource\" ref=\"jmxAttributeSource\"/>\n\u003C/bean>\n",[488,4055,4056,4060,4065,4070,4075,4080,4085,4090,4095,4100,4105,4109,4114,4119,4124,4128,4133,4137],{"__ignoreMap":38},[493,4057,4058],{"class":885,"line":886},[493,4059,889],{"emptyLinePlaceholder":212},[493,4061,4062],{"class":885,"line":197},[493,4063,4064],{},"\u003Cbean id=\"jmxDemo\" class=\"org.synyx.urlaubsverwaltung.jmx.JmxDemo\">\n",[493,4066,4067],{"class":885,"line":200},[493,4068,4069],{}," \u003C!-- maybe you need contructor-injection -->\n",[493,4071,4072],{"class":885,"line":911},[493,4073,4074],{}," \u003C!-- \u003Cconstructor-arg ref=\"myService\" /> -->\n",[493,4076,4077],{"class":885,"line":966},[493,4078,4079],{},"\u003C/bean>\n",[493,4081,4082],{"class":885,"line":972},[493,4083,4084],{}," \u003C!-- you may just copy the following lines -->\n",[493,4086,4087],{"class":885,"line":982},[493,4088,4089],{},"\u003Cbean id=\"exporter\" class=\"org.springframework.jmx.export.MBeanExporter\" lazy-init=\"false\">\n",[493,4091,4092],{"class":885,"line":1116},[493,4093,4094],{},"\u003Cproperty name=\"autodetect\" value=\"true\"/>\n",[493,4096,4097],{"class":885,"line":1127},[493,4098,4099],{},"\u003Cproperty name=\"namingStrategy\" ref=\"namingStrategy\"/>\n",[493,4101,4102],{"class":885,"line":1133},[493,4103,4104],{},"\u003Cproperty name=\"assembler\" ref=\"assembler\"/>\n",[493,4106,4107],{"class":885,"line":1139},[493,4108,4079],{},[493,4110,4111],{"class":885,"line":1154},[493,4112,4113],{},"\u003Cbean id=\"jmxAttributeSource\" class=\"org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource\"/>\n",[493,4115,4116],{"class":885,"line":1160},[493,4117,4118],{},"\u003Cbean id=\"assembler\" class=\"org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler\">\n",[493,4120,4121],{"class":885,"line":1166},[493,4122,4123],{},"\u003Cproperty name=\"attributeSource\" ref=\"jmxAttributeSource\"/>\n",[493,4125,4126],{"class":885,"line":1172},[493,4127,4079],{},[493,4129,4130],{"class":885,"line":1178},[493,4131,4132],{},"\u003Cbean id=\"namingStrategy\" class=\"org.springframework.jmx.export.naming.MetadataNamingStrategy\">\n",[493,4134,4135],{"class":885,"line":1184},[493,4136,4123],{},[493,4138,4139],{"class":885,"line":1190},[493,4140,4079],{},[19,4142,4143],{},"If your application is running inside a container such as Tomcat, you even don’t have to configure the MBeanServer\nbecause the container has its own one.",[19,4145,4146,4147,4150],{},"Setting MBeanExporter’s property ",[26,4148,4149],{},"autodetect"," to true, means that the MBeanExporter will register all the Beans within\nyour application’s context that are annotated in the way described in the next section as MBeans.",[56,4152,4154],{"id":4153},"_2-lets-transform-your-spring-bean-to-a-managed-bean","2. Let’s transform your Spring Bean to a Managed Bean!",[19,4156,4157,4158,4161,4162,4165,4166,92],{},"Spring uses information provided by annotations to generate MBeans. The attributes of the annotations are speaking for\nthemselves so further description isn’t necessary. To mark a Bean for export, it has to be annotated with\n",[26,4159,4160],{},"@ManagedResource",", Attributes are annotated with ",[26,4163,4164],{},"@ManagedAttribute"," and Methods with ",[26,4167,4168],{},"@ManagedOperation",[19,4170,4171],{},[67,4172,4173],{},"2.1 Bean",[19,4175,4176,4177,92],{},"Mark your Bean with ",[26,4178,4160],{},[876,4180,4182],{"className":3719,"code":4181,"language":3721,"meta":38,"style":38},"@ManagedResource(objectName = \"mbeans:name=myJmxDemoBean\", description = \"My managed Bean.\")\npublic class JmxDemo {\n // lot of stuff\n}\n",[488,4183,4184,4189,4193,4198],{"__ignoreMap":38},[493,4185,4186],{"class":885,"line":886},[493,4187,4188],{},"@ManagedResource(objectName = \"mbeans:name=myJmxDemoBean\", description = \"My managed Bean.\")\n",[493,4190,4191],{"class":885,"line":197},[493,4192,3974],{},[493,4194,4195],{"class":885,"line":200},[493,4196,4197],{}," // lot of stuff\n",[493,4199,4200],{"class":885,"line":911},[493,4201,3250],{},[19,4203,4204],{},"Make sure that your MBean doesn’t contain ‘MBean’ in its name since it would be treated as a StandardMBean causing your\nannotations not to work.",[19,4206,4207],{},[67,4208,4209],{},"2.2 Attributes",[19,4211,4212,4213,92],{},"Annotate the Getter and Setter with ",[26,4214,4164],{},[876,4216,4218],{"className":3719,"code":4217,"language":3721,"meta":38,"style":38},"@ManagedAttribute(description = \"Get the number of all waiting applications\" )\npublic long getNumberOfWaitingApplications() {\n return numberOfWaitingApplications;\n}\n",[488,4219,4220,4225,4230,4235],{"__ignoreMap":38},[493,4221,4222],{"class":885,"line":886},[493,4223,4224],{},"@ManagedAttribute(description = \"Get the number of all waiting applications\" )\n",[493,4226,4227],{"class":885,"line":197},[493,4228,4229],{},"public long getNumberOfWaitingApplications() {\n",[493,4231,4232],{"class":885,"line":200},[493,4233,4234],{}," return numberOfWaitingApplications;\n",[493,4236,4237],{"class":885,"line":911},[493,4238,3250],{},[19,4240,4241],{},"Exposing attributes may be:",[258,4243,4244,4247,4250,4253,4256,4259,4262],{},[261,4245,4246],{},"Basic types",[261,4248,4249],{},"Primitives and their wrappers",[261,4251,4252],{},"String",[261,4254,4255],{},"BigDecimal",[261,4257,4258],{},"BigInteger",[261,4260,4261],{},"Date",[261,4263,4264],{},"Arrays and collections of basic types",[19,4266,4267],{},[67,4268,4269],{},"2.2 Methods",[19,4271,4272,4273,92],{},"Annotate each method you wish to expose with ",[26,4274,4168],{},[876,4276,4278],{"className":3719,"code":4277,"language":3721,"meta":38,"style":38},"@ManagedOperation(description = \"Shows a list of all waiting applications with some information.\")\npublic List\u003CString> showWaitingApplications() {\n // do something and return a list of all waiting applications\n}\n",[488,4279,4280,4285,4290,4295],{"__ignoreMap":38},[493,4281,4282],{"class":885,"line":886},[493,4283,4284],{},"@ManagedOperation(description = \"Shows a list of all waiting applications with some information.\")\n",[493,4286,4287],{"class":885,"line":197},[493,4288,4289],{},"public List\u003CString> showWaitingApplications() {\n",[493,4291,4292],{"class":885,"line":200},[493,4293,4294],{}," // do something and return a list of all waiting applications\n",[493,4296,4297],{"class":885,"line":911},[493,4298,3250],{},[19,4300,4301,4302,92],{},"If your methods have parameters you can describe them further with ",[26,4303,4304],{},"@ManagedOperationParameters",[876,4306,4308],{"className":3719,"code":4307,"language":3721,"meta":38,"style":38},"@ManagedOperation(description = \"Get the number of all applications that have the given status.\")\n@ManagedOperationParameters({\n @ManagedOperationParameter(name = \"status\", description = \"The status may be waiting, allowed, rejected or cancelled.\")\n})\npublic long countApplicationsInStatus(String state) {\n // do something and return number of applications with the given status\n}\n",[488,4309,4310,4315,4320,4325,4330,4335,4340],{"__ignoreMap":38},[493,4311,4312],{"class":885,"line":886},[493,4313,4314],{},"@ManagedOperation(description = \"Get the number of all applications that have the given status.\")\n",[493,4316,4317],{"class":885,"line":197},[493,4318,4319],{},"@ManagedOperationParameters({\n",[493,4321,4322],{"class":885,"line":200},[493,4323,4324],{}," @ManagedOperationParameter(name = \"status\", description = \"The status may be waiting, allowed, rejected or cancelled.\")\n",[493,4326,4327],{"class":885,"line":911},[493,4328,4329],{},"})\n",[493,4331,4332],{"class":885,"line":966},[493,4333,4334],{},"public long countApplicationsInStatus(String state) {\n",[493,4336,4337],{"class":885,"line":972},[493,4338,4339],{}," // do something and return number of applications with the given status\n",[493,4341,4342],{"class":885,"line":982},[493,4343,3250],{},[19,4345,4346,4347,4349,4350,4352],{},"Make sure to annotate your Getter/Setter with ",[26,4348,4164],{}," and not with ",[26,4351,4168],{},". Otherwise your\nmethods won’t work.",[56,4354,4356],{"id":4355},"_3-try-it","3. Try it!",[19,4358,4359],{},"You can now use the functions of your MBean either with JConsole or with other tools. (e.g. JMinix)",[19,4361,4362],{},[67,4363,4364],{},"3.1 JConsole",[19,4366,4367],{},"JConsole is part of Oracle’s JDK, so you can just start it by executing the JConsole command in your JDK’s\nbinary-folder. You can connect to local or to remote Java Virtual Machines. If you are running your application on the\nsame host as JConsole it should show up at the ‘Local Process’ section.",[19,4369,4370],{},[36,4371],{"alt":4372,"src":4373},"\"jconsole\"","https://media.synyx.de/uploads//2012/04/jconsole.png",[19,4375,4376],{},[67,4377,4378],{},"3.2 JMinix",[19,4380,4381],{},"If you want to have a JMX entry point in your web application instead of using JConsole, JMinix might be the right\nchoice for you.",[19,4383,4384],{},[36,4385],{"alt":4386,"src":4387},"\"JMinix\"","https://media.synyx.de/uploads//2012/04/jminix.png",[19,4389,4390],{},"You can include it easily in your Maven based web application:",[19,4392,4393],{},"Add JMinix as dependency in your pom.xml",[876,4395,4397],{"className":3682,"code":4396,"language":3684,"meta":38,"style":38},"\n\u003Cdependency>\n \u003CgroupId>org.jminix\u003C/groupId>\n \u003CartifactId>jminix\u003C/artifactId>\n \u003Cversion>1.0.0\u003C/version>\n\u003C/dependency>\n",[488,4398,4399,4403,4408,4413,4418,4423],{"__ignoreMap":38},[493,4400,4401],{"class":885,"line":886},[493,4402,889],{"emptyLinePlaceholder":212},[493,4404,4405],{"class":885,"line":197},[493,4406,4407],{},"\u003Cdependency>\n",[493,4409,4410],{"class":885,"line":200},[493,4411,4412],{}," \u003CgroupId>org.jminix\u003C/groupId>\n",[493,4414,4415],{"class":885,"line":911},[493,4416,4417],{}," \u003CartifactId>jminix\u003C/artifactId>\n",[493,4419,4420],{"class":885,"line":966},[493,4421,4422],{}," \u003Cversion>1.0.0\u003C/version>\n",[493,4424,4425],{"class":885,"line":972},[493,4426,4427],{},"\u003C/dependency>\n",[19,4429,4430],{},"JMinix uses a simple HttpServlet that you have to register and map to an url-pattern in your web.xml",[876,4432,4434],{"className":3682,"code":4433,"language":3684,"meta":38,"style":38},"\u003C!-- JMX -->\n\u003Cservlet>\n \u003Cservlet-name>JmxMiniConsoleServlet\u003C/servlet-name>\n \u003Cservlet-class>org.jminix.console.servlet.MiniConsoleServlet\u003C/servlet-class>\n\u003C/servlet>\n\u003Cservlet-mapping>\n\u003Cservlet-name>JmxMiniConsoleServlet\u003C/servlet-name>\n\u003Curl-pattern>/jmx/*\u003C/url-pattern>\n\u003C/servlet-mapping>\n",[488,4435,4436,4441,4446,4451,4456,4461,4466,4471,4476],{"__ignoreMap":38},[493,4437,4438],{"class":885,"line":886},[493,4439,4440],{},"\u003C!-- JMX -->\n",[493,4442,4443],{"class":885,"line":197},[493,4444,4445],{},"\u003Cservlet>\n",[493,4447,4448],{"class":885,"line":200},[493,4449,4450],{}," \u003Cservlet-name>JmxMiniConsoleServlet\u003C/servlet-name>\n",[493,4452,4453],{"class":885,"line":911},[493,4454,4455],{}," \u003Cservlet-class>org.jminix.console.servlet.MiniConsoleServlet\u003C/servlet-class>\n",[493,4457,4458],{"class":885,"line":966},[493,4459,4460],{},"\u003C/servlet>\n",[493,4462,4463],{"class":885,"line":972},[493,4464,4465],{},"\u003Cservlet-mapping>\n",[493,4467,4468],{"class":885,"line":982},[493,4469,4470],{},"\u003Cservlet-name>JmxMiniConsoleServlet\u003C/servlet-name>\n",[493,4472,4473],{"class":885,"line":1116},[493,4474,4475],{},"\u003Curl-pattern>/jmx/*\u003C/url-pattern>\n",[493,4477,4478],{"class":885,"line":1127},[493,4479,4480],{},"\u003C/servlet-mapping>\n",[56,4482,4484],{"id":4483},"_4-notifications","4. Notifications",[19,4486,4487],{},"Notifications (javax.management.Notification) can be broadcast from your component to notify about something interesting\nhappening. This is only a simple example of using Notifications.",[19,4489,4490],{},"Example: You want to be notified if a user logs in.",[876,4492,4494],{"className":3719,"code":4493,"language":3721,"meta":38,"style":38},"@ManagedResource(objectName = \"mbeans:name=myJmxDemoBean\", description = \"Manage some 'Urlaubsverwaltung' problems.\")\npublic class JmxDemoReady implements NotificationPublisherAware {\n // lot of stuff\n private NotificationPublisher notificationPublisher;\n public void notifyAboutLogin(String msg) {\n notificationPublisher.sendNotification(new Notification(\"Login Action\", this, 0, msg));\n }\n @Override\n public void setNotificationPublisher(NotificationPublisher notificationPublisher) {\n this.notificationPublisher = notificationPublisher;\n }\n}\n",[488,4495,4496,4501,4506,4510,4515,4520,4525,4529,4534,4539,4544,4548],{"__ignoreMap":38},[493,4497,4498],{"class":885,"line":886},[493,4499,4500],{},"@ManagedResource(objectName = \"mbeans:name=myJmxDemoBean\", description = \"Manage some 'Urlaubsverwaltung' problems.\")\n",[493,4502,4503],{"class":885,"line":197},[493,4504,4505],{},"public class JmxDemoReady implements NotificationPublisherAware {\n",[493,4507,4508],{"class":885,"line":200},[493,4509,4197],{},[493,4511,4512],{"class":885,"line":911},[493,4513,4514],{}," private NotificationPublisher notificationPublisher;\n",[493,4516,4517],{"class":885,"line":966},[493,4518,4519],{}," public void notifyAboutLogin(String msg) {\n",[493,4521,4522],{"class":885,"line":972},[493,4523,4524],{}," notificationPublisher.sendNotification(new Notification(\"Login Action\", this, 0, msg));\n",[493,4526,4527],{"class":885,"line":982},[493,4528,3994],{},[493,4530,4531],{"class":885,"line":1116},[493,4532,4533],{}," @Override\n",[493,4535,4536],{"class":885,"line":1127},[493,4537,4538],{}," public void setNotificationPublisher(NotificationPublisher notificationPublisher) {\n",[493,4540,4541],{"class":885,"line":1133},[493,4542,4543],{}," this.notificationPublisher = notificationPublisher;\n",[493,4545,4546],{"class":885,"line":1139},[493,4547,3994],{},[493,4549,4550],{"class":885,"line":1154},[493,4551,3250],{},[19,4553,4554],{},"With the NotificationPublisher you are able to create Notifications in a very simple way. At the right place in your\ncode, you inject your JmxDemo Bean and call the method notifyAboutLogin() when a user logs in. JConsole now displays a\nthird menu item called ‘Notifications’, besides ‘Attributes’ and ‘Operations’. If you click on ‘Subscribe’, you get a\nNotification every time a user logs in your web application.",[56,4556,4558],{"id":4557},"_5-further-information","5. Further information:",[19,4560,4561],{},[80,4562,3912],{"href":4563,"rel":4564},"http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jmx.html",[84],[19,4566,4567],{},[80,4568,4571],{"href":4569,"rel":4570},"http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html",[84],"About JConsole",[19,4573,4574],{},[80,4575,4578],{"href":4576,"rel":4577},"http://code.google.com/p/jminix/",[84],"About JMinix",[19,4580,4581],{},[80,4582,4585],{"href":4583,"rel":4584},"http://blog.synyx.de/2011/11/elektronische-urlaubsverwaltung-made-by-youngsters",[84],"About the vacation management web application",[2942,4587,3522],{},{"title":38,"searchDepth":197,"depth":197,"links":4589},[4590,4591,4592,4593,4594],{"id":4046,"depth":200,"text":4047},{"id":4153,"depth":200,"text":4154},{"id":4355,"depth":200,"text":4356},{"id":4483,"depth":200,"text":4484},{"id":4557,"depth":200,"text":4558},[206,2964],"2012-05-07T17:56:12","JMX (Java Management Extensions) provides the infrastructure to support monitoring and management of your Java\\napplications. Resources you manage with JMX are called Managed Beans (MBeans). I want to show you how to quickly\\nregister your own Service as MBean using Spring and Source-Level Metadata (JDK 5.0+ annotations).","https://synyx.de/blog/how-to-monitor-and-manage-your-java-application-with-jmx/",{},"/blog/how-to-monitor-and-manage-your-java-application-with-jmx",{"title":3940,"description":3949},"blog/how-to-monitor-and-manage-your-java-application-with-jmx",[4604,4605,4606,4607,4608,4609,4610,3934],"annotation","jconsole","jminix","jmx","mbeans","metadata","notifications","JMX (Java Management Extensions) provides the infrastructure to support monitoring and management of your Java applications. Resources you manage with JMX are called Managed Beans (MBeans). I want to show…","Lf-pqL8fxMUtFEesPQZ2fYbpNoUAqH8DOQaGCkCDsBA",{"id":4614,"title":4615,"author":4616,"body":4618,"category":4631,"date":4632,"description":38,"extension":209,"link":4633,"meta":4634,"navigation":212,"path":4635,"seo":4636,"slug":4637,"stem":4638,"tags":4639,"teaser":4641,"__hash__":4642},"blog/blog/unsere-azubis-erzahlen-wie-sie-ihre-ausbildung-bei-synyx-erleben.md","Unsere Azubis erzählen wie sie ihre Ausbildung bei synyx erleben",[4617],"karrasz",{"type":12,"value":4619,"toc":4629},[4620,4623],[15,4621,4615],{"id":4622},"unsere-azubis-erzählen-wie-sie-ihre-ausbildung-bei-synyx-erleben",[19,4624,4625],{},[36,4626],{"alt":38,"src":4627,"title":4628},"https://media.synyx.de/uploads//2012/03/aljona_matze.jpg","aljona_matze",{"title":38,"searchDepth":197,"depth":197,"links":4630},[],[206],"2012-03-28T14:39:21","https://synyx.de/blog/unsere-azubis-erzahlen-wie-sie-ihre-ausbildung-bei-synyx-erleben/",{},"/blog/unsere-azubis-erzahlen-wie-sie-ihre-ausbildung-bei-synyx-erleben",{"title":4615,"description":38},"unsere-azubis-erzahlen-wie-sie-ihre-ausbildung-bei-synyx-erleben","blog/unsere-azubis-erzahlen-wie-sie-ihre-ausbildung-bei-synyx-erleben",[219,4640],"fachinformatiker","Aljona und Matze sind seit einem Jahr bei uns in der Ausbildung zum Fachinformatiker. Aljona in der Fachrichtung Anwendungsentwicklung und Matze in der Fachrichtung Systemintegration. Wie haben die Zwei das…","irV41VhJdkbWPC5X0WonFp2Gc8ftceFhZ3LgipCBKYw",{"id":4644,"title":4645,"author":4646,"body":4648,"category":4718,"date":4719,"description":4655,"extension":209,"link":4720,"meta":4721,"navigation":212,"path":4722,"seo":4723,"slug":4652,"stem":4724,"tags":4725,"teaser":4726,"__hash__":4727},"blog/blog/wie-man-mitarbeiter-ohne-brettspiele-plant.md","Wie man Mitarbeiter ohne Brettspiele plant",[4647],"allmendinger",{"type":12,"value":4649,"toc":4716},[4650,4653,4656,4663,4666,4675,4713],[15,4651,4645],{"id":4652},"wie-man-mitarbeiter-ohne-brettspiele-plant",[19,4654,4655],{},"Ressourcenplanung Classic",[19,4657,4658,4659,4662],{},"Es ist Freitag Vormittag, Anfang Oktober 2011. Sechs Mitarbeiter und einer unserer Geschäftsführer versammeln sich um\neine große Tafel, die auf dem Tisch in der Mitte unseres Besprechungsraums liegt. Auf der Tafel haften fast 1.000\ndaumennagelgroße Plättchen, jedes farbig umrahmt und beklebt mit dem Bild von einem unserer 23 Mitarbeiter.\nEiner der versammelten Mitarbeiter ist der",[26,4660,4661],{},"Moderator"," und erhält von den umstehenden Teilnehmern fortlaufend\nAnweisungen. Jemand möchte, dass eine bestimmte Anzahl von Plättchen auf der Tafel von einer Region in eine andere\ngeschoben wird. Der nächste Mitspieler schaut sich das in Ruhe an, überlegt kurz, und will, dass andere Plättchen auf\neinen anderen Teil der Tafel geschoben werden. Der Nächste ist damit nicht ganz einverstanden und fordert, dass die\nPlättchen wieder zurück kommen. Der Vierte ist sich nicht ganz sicher, ob überhaupt die richtige Anzahl von Plättchen\nauf dem Tisch liegt.\nNach nach etwa 45 Minuten haben sich alle mehr oder weniger auf eine Anordnung geeinigt. Der Moderator notiert auf einem\nZettel, wie viele Plättchen mit welcher Farbe und Bildchen an welchem Ort befindet und schickt das Ergebnis in einer\nEmail an die Mitarbeiter. Das Spiel ist beendet. Es gibt keinen Gewinner.\nWas wie lahme Version von Risiko aussieht, ist die Planung unserer Mitarbeiter (Unternehmerdeutsch: Ressourcenplanung).\nJedes der Plättchen repräsentiert zwei Stunden Arbeitszeit des Mitarbeiters, die gekennzeichneten Bereiche sind die\nProjekte, für er oder sie arbeiten soll. Ein rotes Plättchen steht für die nächste Kalenderwoche, ein Gelbes für die\nübernächste, ein Schwarzes für die Woche danach. Die Projektleiter und die Geschäftsführung verhandeln dann, welcher\nMitarbeiter in den nächsten drei Wochen in welchem Projekt arbeiten soll. Dazu muss man allerdings wissen, ob ein\nMitarbeiter zum Beispiel Urlaub hat oder es einen Feiertag gibt. Die entsprechende Anzahl von Plättchen mit dem\nrichtigen Bild und der richtigen Farbe muss also ausgerechnet und anschließend auf die Tafel gelegt werden. Die\nProjektleiter haben auf ihrem Zettel notiert, wieviel Arbeitszeit sie von ihren Mitarbeitern für die nächsten Wochen\nbenötigen, der Moderator schiebt sie dann auf der Tafel zu den Projekten, für die ein Mitarbeiter arbeiten soll.\nUrsprünglich gab es bei Synyx keine explizite Planung der Ressourcen, und die Arbeit wurde ad hoc aufgeteilt. Mit der\nZeit wurde dieses System durch eine gemeinsame Besprechung ersetzt, bei der informell die Arbeitsplanung auf einem\nWhiteboard festgehalten wurde. Dieser Prozess wurde von einem Student der Wirtschafts-Informatik an der Hochschule\nKarlsruhe in seiner Bachelor-Arbeit analysiert und verbessert.\nErgebnis ist das eben beschriebene System, ein gewaltiger Fortschritt, aber trotzdem mit Nachteilen verbunden: Die\nPlättchen müssen angefertigt werden, neue Mitarbeiter müssen fotografiert, Bilder gedruckt und auf die Plättchen geklebt\nwerden. Die Fotos sind recht klein und nicht immer leicht zu unterscheiden, was das Zählen schwierig macht. Die\nVerfügbarkeit der Mitarbeiter wird im Vorfeld ermittelt und die errechnete Anzahl von Plättchen auf die Tafel gebracht.\nDiese Vorbereitungen beschäftigen die Mitarbeiter eine ganze Weile vor Beginn der eigentlichen Planung.",[19,4664,4665],{},"Ressourcenplanung on Crack",[19,4667,4668,4669,4674],{},"Seit Oktober bin ich Praktikant bei synyx. Meine Aufgabe ist es, die Ressourcenplanung ins 21. Jahrhundert zu bringen.\nKeine Plättchen, keine Tafel, keine Zettel und kein Nachrechnen mehr.\nAuf der synyx-Plattform ",[80,4670,4673],{"href":4671,"rel":4672},"https://github.com/synyx/minos",[84],"Minos","basierend habe ich in den letzten vier Monaten eine\nWeb-Applikation entwickelt, die es uns erlaubt, die Mitarbeiter einfach und bequem im Browser zu planen. Im Laufe der\nWoche tragen die Projektleiter ihre Anforderungen in einer Maske ein.\nAm Freitag versammeln sich wie früher alle, die bei der Planung mitzureden haben, und legen fest wo welcher Mitarbeiter\narbeitet. Anforderungen sind womöglich unvollständig, oder es wird mehr angefordert, als es die Verfügbarkeit des\nMitarbeiters erlaubt. So können wir statt Plättchen auf dem Tisch zu schieben auf die Leinwand schauen, wo zum Beispiel\ndiese Ansicht projiziert wird",[19,4676,4677,4678,4681,4682,4684,4685,3599,4690,4695,4696,4701,4702,4707,4708,4712],{},"Hier stehen übersichtlich die Anforderungen und die Zuteilungen für das Projekt ",[26,4679,4680],{},"Synovierung","gegenüber. Die Zuteilungen\nwerden dann von einem zum ",[26,4683,4661],{},"ernannten Mitarbeiter bearbeitet. Wenn jemand also für die nächste Woche noch\nArbeitszeit übrig hat, wird sein Name blau hinterlegt (Matthias). Der Moderator erhöht dann die Zuteilung für einen\nArbeitstag, bis der Name grau erscheint (wie bei Aljona). Wenn jemand überbucht ist, wird die Arbeitszeit für ein\nProjekt reduziert. Zum Schluss speichert der Moderator die Zuteilung für dieses Projekt, und steuert das nächste an.\nDie Planungs- und Vorbereitungszeit ist jetzt ein Bruchteil im Vergleich zum alten System.\nHinter dieser Software steckt natürlich eine Menge\nArbeit: ",[80,4686,4689],{"href":4687,"rel":4688},"http://blog.synyx.de/autoren/?uid=14",[84],"Fabian",[80,4691,4694],{"href":4692,"rel":4693},"http://blog.synyx.de/autoren/?uid=12",[84],"Sebastian",",",[80,4697,4700],{"href":4698,"rel":4699},"http://blog.synyx.de/autoren/?uid=16",[84],"Marc","\nund ich haben uns eine ganze Weile überlegt, was überhaupt zu machen ist: Was sind die Planungseinheiten? Woher kommen\ndie Informationen über die Verfügbarkeit? Wie soll die Oberfläche aussehen? Die Implementierung als Web-Applikation\numfasst neben Minos, Hades, Spring, HTML5/JavaScript viele weitere Technologien. Permanent wird von abstrakten Konzepten\nbis zu Implementierungs-Details an allem gearbeitet. Das Wissen, das ich mir dabei angeeignet habe, kann man unmöglich\nin einem Blog-Post unterbringen, daher werden bestimmt noch einige folgen.\nDank voller Punktzahl beim ",[80,4703,4706],{"href":4704,"rel":4705},"http://www.joelonsoftware.com/articles/fog0000000043.html",[84],"Joel-Test","ist synyx genau das\nrichtige Unternehmen für dieses Projekt. Wenn der Code Anfang nächsten Jahres auf",[80,4709,442],{"href":4710,"rel":4711},"http://github.com",[84],"steht, könnt\nihr euch selbst davon überzeugen.",[4714,4715],"hr",{},{"title":38,"searchDepth":197,"depth":197,"links":4717},[],[206],"2011-12-23T09:52:33","https://synyx.de/blog/wie-man-mitarbeiter-ohne-brettspiele-plant/",{},"/blog/wie-man-mitarbeiter-ohne-brettspiele-plant",{"title":4645,"description":4655},"blog/wie-man-mitarbeiter-ohne-brettspiele-plant",[],"Ressourcenplanung Classic Es ist Freitag Vormittag, Anfang Oktober 2011. Sechs Mitarbeiter und einer unserer Geschäftsführer versammeln sich um eine große Tafel, die auf dem Tisch in der Mitte unseres…","RI-eiyuhMrK8Ib9Z8nX_0wzPzLZsE5q9s213Vlfj30M",{"id":4729,"title":4730,"author":4731,"body":4732,"category":4845,"date":4846,"description":38,"extension":209,"link":4847,"meta":4848,"navigation":212,"path":4849,"seo":4850,"slug":4851,"stem":4852,"tags":4853,"teaser":4854,"__hash__":4855},"blog/blog/meine-ausbildung-bei-synyx-2.md","Meine Ausbildung bei Synyx",[3543],{"type":12,"value":4733,"toc":4840},[4734,4737,4743,4746,4749,4754,4758,4761,4764,4767,4773,4777,4780,4783,4786,4790,4796,4799,4808,4815,4818,4827,4834,4837],[15,4735,4730],{"id":4736},"meine-ausbildung-bei-synyx",[19,4738,4739],{},[36,4740],{"alt":4741,"src":4742},"\"Ausbildungswerkzeug 1\"","https://media.synyx.de/uploads//2011/11/IMG_20111109_115806.jpg",[19,4744,4745],{},"Ausbildungswerkzeug 1",[19,4747,4748],{},"Nach etwas mehr als 2 Jahren nehme ich mir mal die Zeit, etwas über meine Ausbildung bei Synyx zu schreiben (Und das\nnicht nur, weil es sonst mit dem Paddel gibt ",[19,4750,4751],{},[26,4752,4753],{},"Vor der Ausbildung wusste ich noch nicht so recht, was mich erwarten wird. Ich hatte vorher zwar schon einmal ein\nmehrwöchiges Praktikum bei einer anderen Firma absolviert, aber darin hatte ich nicht wirklich viel vom Beruf des\nFachinformatikers mitbekommen. Programmieren hatte ich vorher schon ein bisschen in der Schule und da mir das gefiel,\nentschied ich mich für diesen Beruf. Außerdem tat ich mich zu der Zeit noch recht schwer mit neuen Leuten konfrontiert\nzu werden, auch wenn ich die meisten schon auf der vorherigen Sommerfeier kennen lernen konnte.",[248,4755,4757],{"id":4756},"erstes-jahr","Erstes Jahr",[19,4759,4760],{},"Im September 2009 begann meine Ausbildung bei Synyx damit, meinen Rechner einzurichten. Dafür hatte mir mein Ausbilder\nAlex einen Zettel mit ein paar Anweisungen und Tipps + eine IP-Adresse gegeben, von der aus ich Linux per netinstall\ninstallieren konnte.",[19,4762,4763],{},"In den folgenden Wochen und Monaten bekam ich von Alex die Grundlagen für die Entwicklung mit Java und auch mit JSP,\nHTML und CSS gezeigt. Die Zeit, in der er mit anderen Sachen beschäftigt war, konnte ich damit verbringen, Bücher zu\nlesen und kleine Übungen und Testprojekte anzugehen, um mehr Übung mit dem Programmieren zu bekommen. Wenn ich mit etwas\nnicht weiterkam, konnte ich stets Alex oder andere Mitarbeiter fragen und bekam von ihnen alles super erklärt.",[19,4765,4766],{},"Die Berufsschule war von Anfang an überhaupt kein Problem, da ich das Meiste vorher schon einmal in der Schule, oder,\nwie beim Programmieren, bei Synyx gelernt hatte.",[19,4768,4769],{},[36,4770],{"alt":38,"src":4771,"title":4772},"https://media.synyx.de/uploads//2011/11/sudoku_screenshot2-200x300.png","sudoku_screenshot2",[248,4774,4776],{"id":4775},"zweites-jahr","Zweites Jahr",[19,4778,4779],{},"In meinem zweiten Jahr wurde ich einem Produktivprojekt, das auf OpenCMS aufbaut, zugeteilt und habe so einerseits den\nUmgang mit OpenCMS, viel wichtiger jedoch, das Arbeiten im Team gelernt. Auch hier wurde mir jederzeit unter die Arme\ngegriffen, wenn ich Hilfe benötigte und so fand ich mich gut im Projekt ein. In diesem Projekt war ich auch erstmals bei\nMeetings mit Kunden dabei, was mir anfangs noch ziemlich unangenehm war. Nach ein paar Meetings, und als ich mehr Ahnung\nvom Projekt hatte, war das aber auch kein Problem mehr.",[19,4781,4782],{},"Teilweise arbeitete ich nebenbei an I-think-I-spider und anderen kleinen Sachen weiter. Zeit zum Lernen wurde mir\naber auch weiterhin noch gegeben.",[19,4784,4785],{},"Im Laufe des Jahres kam noch ein weiteres OpenCMS Projekt hinzu, das aber etwas anders aufgebaut war und somit doch\nwieder reichlich neue Erfahrungen brachte. Das Projekt wurde vorher von einer anderen Firma geleitet und nun sollten wir\ndaran weiter programmieren. Interessant war dabei, zu sehen, wie unterschiedlich die Ansätze der anderen Firma für\nverschiedene Sachen waren, obwohl die vorhandene Technik eigentlich dieselbe war.",[248,4787,4789],{"id":4788},"heute","Heute",[19,4791,4792],{},[36,4793],{"alt":4794,"src":4795},"\"Ausbildungswerkzeug 2\"","https://media.synyx.de/uploads//2011/11/IMG_20111109_120228.jpg",[19,4797,4798],{},"Ausbildungswerkzeug 2",[19,4800,4801,4802,4807],{},"Nun stehe ich am Anfang meines dritten Ausbildungsjahres und wurde auch hier wieder einer neuen Abteilung bei uns,\nder ",[80,4803,3567],{"href":4804,"rel":4805,"title":4806},"http://www.synyx.de/de/leistungen/code-clinic.html",[84],"Synyx Code Clinic"," zugeteilt. Hier ist das\nProgramm, alte, gegen die Wand gefahrene Projekte von anderen Firmen zu retten und zu verarzten. Somit lerne ich wieder\neine ganz andere Seite des Berufes kennen: Eine ganz andere Projektstruktur, als ich sie bisher gesehen hatte, nur sehr\nwenig sauberer und verständlicher Code, alles komplett veraltet und viel Politik. Einerseits ist es anstrengender, als\ndie bisherigen Projekte, andererseits lerne ich aber auch sehr viel dabei.",[19,4809,4810],{},[67,4811,4812],{},[26,4813,4814],{},"-Ein paar Wochen später-",[19,4816,4817],{},"Wie bereits erwartet, ist es etwas ganz anderes, sich in ein so großes Projekt einzuarbeiten, als es bei meinen\nbisherigen Projekten der Fall war. Vor allem, weil viele Techniken eingesetzt werden, die ich bisher noch nicht\nverwendet hatte, aber auch, weil es von anderern programmiert wurde und der Code einfach einen ganz anderen Stil (und\nQualität…) hat, als ich es von Synyx gewohnt bin.",[19,4819,4820,4821,4826],{},"Die Problematik des Einarbeitens in ein fremdes Projekt wurde mir nochmals bewusst, als ich ein Android Projekt für das\nZKM in Karlsruhe übernahm –\ndie ",[80,4822,4825],{"href":4823,"rel":4824,"title":4825},"http://www.karlsruhe.de/b1/kultur/kulturinkarlsruhe/kulturapp.de",[84],"KulturApp Karlsruhe",". Hier\nwar es weniger die Größe, sondern vielmehr alle anderen oben genannten Punkte. Schmerzhaft musste ich in diesem Projekt\nfeststellen, wie man sich bei einem solchen Vorhaben dann auch mal mit dem Zeitaufwand verschätzen kann, wenn man diese\nFaktoren nicht genügend berücksichtigt. Davon schreibe ich jedoch später eventuell mehr in einem anderen Blogeintrag. Um\neinige Erfahrungen reicher bin ich durch dieses Projekt aber auf jeden Fall geworden und werde mich in zukünftigen\nProjekten besser vor den genannten Problemen hüten.",[19,4828,4829],{},[67,4830,4831],{},[26,4832,4833],{},"So…",[19,4835,4836],{},"das war es vorerst einmal von meiner Ausbildung, die manchmal ein wenig chaotisch abläuft, die aber (oder vielleicht\ngerade deshalb) doch sehr viel Spaß macht. Synyx ist ein lustiger Haufen, man lernt hier sehr viel und bekommt jederzeit\ngeholfen. Da hatte ich echt Glück, dass mir die erste Ausbildungsstelle, die ich fast bekommen hätte, im letzten\nAugenblick doch abgesagt wurde.",[19,4838,4839],{},"Ich hoffe ich habe euch hiermit einen guten Einblick verschafft und dass ich vielleicht den ein oder anderen dazu\nbewege, sich auch bei Synyx zu bewerben. 😛",{"title":38,"searchDepth":197,"depth":197,"links":4841},[4842,4843,4844],{"id":4756,"depth":197,"text":4757},{"id":4775,"depth":197,"text":4776},{"id":4788,"depth":197,"text":4789},[206],"2011-11-09T12:28:33","https://synyx.de/blog/meine-ausbildung-bei-synyx-2/",{},"/blog/meine-ausbildung-bei-synyx-2",{"title":4730,"description":38},"meine-ausbildung-bei-synyx-2","blog/meine-ausbildung-bei-synyx-2",[219],"Ausbildungswerkzeug 1 Nach etwas mehr als 2 Jahren nehme ich mir mal die Zeit, etwas über meine Ausbildung bei Synyx zu schreiben (Und das nicht nur, weil es sonst mit…","-LtTxuEL3_9850xlaYlPEg1DRIY473gTOmCAK9blNeg",{"id":4857,"title":4858,"author":4859,"body":4860,"category":4979,"date":4980,"description":4981,"extension":209,"link":4982,"meta":4983,"navigation":212,"path":4984,"seo":4985,"slug":4864,"stem":4986,"tags":4987,"teaser":4990,"__hash__":4991},"blog/blog/elektronische-urlaubsverwaltung-made-by-youngsters.md","Elektronische Urlaubsverwaltung made by Youngsters",[470],{"type":12,"value":4861,"toc":4977},[4862,4865,4868,4871,4874,4879,4882,4885,4888,4891,4894,4914,4917,4920,4923,4926,4929,4932,4935,4938,4941,4947,4950,4953,4956,4959,4962,4965,4968,4971,4974],[15,4863,4858],{"id":4864},"elektronische-urlaubsverwaltung-made-by-youngsters",[19,4866,4867],{},"Für die erfolgreiche Genehmigung von Urlaub muss der synyx’sche Mitarbeiter sich bisher mit einem Stück Papier alias\n‘schriftlich ausgefüllter Urlaubsantrag’ bewaffnen und sich an einen der drei Chefs anpirschen, um eine Unterschrift zu\nergattern.",[19,4869,4870],{},"Dies ist nicht nur zeitaufwändig, sondern auch einfach nicht zeitgemäß für eine junge Software-Schmiede wie Synyx.",[19,4872,4873],{},"So erhielten Johannes Reuter (Studentische Hilfskraft seit 1. August 2011) und ich, Aljona Murygina (Auszubildende zur\nFachinformatikerin seit 1. August 2011), den Auftrag, das ganze Prozedere zu modernisieren, wir befinden uns\nschließlich im Jahr 2011:",[19,4875,4876],{},[67,4877,4878],{},"Ein Urlaubsverwaltungs-Tool als Webapplikation muss her.",[19,4880,4881],{},"Als Grundgerüst der Applikation wurden drei verschiedene Arten von Usern festgelegt:",[19,4883,4884],{},"der normale User (Antragssteller: Urlaub beantragen),",[19,4886,4887],{},"der Chef (Vergabeberechtigter: Urlaubsantrag genehmigen/ablehnen) und",[19,4889,4890],{},"das Office (eine Art Super-User mit Verwaltungs- und Editierfunktion: Urlaubsantrag bearbeiten).",[19,4892,4893],{},"Essentielle Grundfunktionen des Urlaubsverwaltungs-Tool sollen sein:",[258,4895,4896,4899,4902,4905,4908,4911],{},[261,4897,4898],{},"Die Authentifizierung soll mittels bereits vorhandenen LDAP-Benutzerdaten der Mitarbeiter erfolgen.",[261,4900,4901],{},"Urlaubsanträge sollen digital validiert werden, das heißt Antragssteller und Antraggenehmigender müssen jeweils über\neinen einzigartigen Identifikationsnachweis (‘digitale Unterschrift’) verfügen.",[261,4903,4904],{},"Eine Interaktion mit dem firmeninternen Google-Kalender soll für automatisierte Übersichtlichkeit sorgen, welche\nMitarbeiter in welchem Zeitraum im Urlaub sind.",[261,4906,4907],{},"Transparenz ist die Quintessenz einer Open Source Firma und hört auch nicht bei firmeninternen Vorgängen auf. Daher\nsollen jegliche Schritte der Bearbeitung von Anträgen durch eine Log-Datei nachvollziehbar sein können.",[261,4909,4910],{},"Via E-Mail sollen die jeweils Beteiligten über den laufenden Antragsvorgang informiert werden, ob zum Beispiel ein\nneuer zu genehmigender Antrag vorliegt oder ein Antrag genehmigt wurde.",[261,4912,4913],{},"Urlaubstage per Hand abzuzählen ist ziemlich retro, weshalb im digitalen Urlaubsantrag nur noch via Datumseingabe ein\nZeitraum angegeben werden soll. Über einen Feiertagskalender berechnet dann die Applikation statt der Antragssteller,\nwie viele Urlaubstage netto für diesen Zeitraum vom Urlaubskonto des Mitarbeiters abgezogen werden.",[19,4915,4916],{},"Was die programmatischen Werkzeuge betrifft, wurde uns freie Hand gelassen.",[19,4918,4919],{},"Wir entschieden uns, den Kern des Tools in Java zu schreiben und für die ‘äußere Hülle’ der Webapplikation das Framework\nSpring MVC zu benutzen.",[19,4921,4922],{},"Zunächst erschien uns der Arbeitsauftrag ziemlich trivial.",[19,4924,4925],{},"Bei der Konzeption des Tools allerdings stießen wir doch schnell an einige Stolpersteine.",[19,4927,4928],{},"Zu nennen wäre hier beispielsweise:",[19,4930,4931],{},"Die LDAP-Authentifizierung erschien auf den ersten Blick einfacher, bis wir feststellten, was für ein komplexes und\nweites Feld Spring Security eigentlich darstellt.",[19,4933,4934],{},"Bei der digitalen Validierung wechselten wir mehrmals unsere Meinung. Zur Auswahl verfügbar wäre erstens ein Photo der\neigenen Unterschrift, verknüpft mit der jeweiligen Person, oder zweitens die Signatur mittels eines persönlichen\nPGP-Schlüssels. (momentan favorisieren wir letztere Möglichkeit)",[19,4936,4937],{},"Auch die Interaktion mit einem Google-Kalender ist ein Feld, in das es sich noch einzulesen gilt.",[19,4939,4940],{},"Den inneren Kern unseres Tools, die Domain-Objekte, haben wir nun letztendlich in die Klassen Antrag, Person,\nUrlaubsanspruch und Urlaubskonto gegliedert.",[19,4942,4943],{},[36,4944],{"alt":4945,"src":4946},"\"Domainobjekte\"","https://media.synyx.de/uploads//2011/11/Domainobjekte1.png",[19,4948,4949],{},"Als formelle Stolpersteine bei der Konzeption und Implementierung der Domain-Objekte und Services erwies sich die\nUnterscheidung in ‘normalen’ Urlaub und Resturlaub.",[19,4951,4952],{},"Resturlaub ist übrig gebliebener Jahresurlaub aus dem vorherigen Jahr, den ein Mitarbeiter mit ins neue Jahr nimmt.",[19,4954,4955],{},"Zwei wichtige Daten sind also der 1. Januar und der 1. April.",[19,4957,4958],{},"Am 1. Januar wird aus dem verbliebenem Urlaub des vorigen Jahres Resturlaub, während am 1. April dieser Resturlaub\nverfällt.",[19,4960,4961],{},"Wenn der Urlaubszeitraum also über einen dieser beiden Termine fällt (z.B. Urlaub vom 25.03. – 04.04.), erfordert\ndie Berechnung des Urlaubskontos des Mitarbeiters eine besondere Logik.",[19,4963,4964],{},"Die entsprechenden Services (AntragService, PersonService, UrlaubskontoService) sind großteils schon ausimplementiert,\njedoch ergeben sich aufgrund der Herausforderung der besonderen datumsabhängigen Logik immer wieder Veränderungen im\nCode.",[19,4966,4967],{},"Der MailService ist bisher gelöst mit dem JavaMailSender und MimeMessagePreparator (\norg.springframework.mail.javamail.*), benötigt sicherlich jedoch auch noch eine Überarbeitung der genauen Details.",[19,4969,4970],{},"Controller und die zugehörigen JSPs sind ebenfalls bereits großteils funktionsfähig, z.B. Darstellung von Mitarbeiter-\noder Antragslisten (zum Beispiel nach Status, Person, Datum), Formular zur Antragsstellung.",[19,4972,4973],{},"Das Design betreffend (z.B. dynamische Menü-Navigation oder Kalenderdarstellung ‘DatePicker’) werden wir aller\nWahrscheinlichkeit nach zu Bibliotheken von jQuery greifen.",[19,4975,4976],{},"Bevor wir allerdings überhaupt an das i-Tüpfelchen Design denken können, haben wir noch einen langen Weg vor uns….",{"title":38,"searchDepth":197,"depth":197,"links":4978},[],[206],"2011-11-07T20:13:06","Für die erfolgreiche Genehmigung von Urlaub muss der synyx’sche Mitarbeiter sich bisher mit einem Stück Papier alias\\n‘schriftlich ausgefüllter Urlaubsantrag’ bewaffnen und sich an einen der drei Chefs anpirschen, um eine Unterschrift zu\\nergattern.","https://synyx.de/blog/elektronische-urlaubsverwaltung-made-by-youngsters/",{},"/blog/elektronische-urlaubsverwaltung-made-by-youngsters",{"title":4858,"description":4867},"blog/elektronische-urlaubsverwaltung-made-by-youngsters",[219,3657,4988,767,3144,3145,4989],"spring-mvc","webapplikation","Für die erfolgreiche Genehmigung von Urlaub muss der synyx’sche Mitarbeiter sich bisher mit einem Stück Papier alias ‘schriftlich ausgefüllter Urlaubsantrag’ bewaffnen und sich an einen der drei Chefs anpirschen, um…","Iciij-U2SfXBfMkPBt4jEMrE_4Z6koLV-sClbDtNMa0",{"id":4993,"title":4994,"author":4995,"body":4997,"category":5048,"date":5049,"description":5050,"extension":209,"link":5051,"meta":5052,"navigation":212,"path":5053,"seo":5054,"slug":5001,"stem":5055,"tags":5056,"teaser":5057,"__hash__":5058},"blog/blog/nun-werde-ich-zum-fachinformatikersystemintegration-gemacht.md","Nun werde ich zum Fachinformatiker/Systemintegration gemacht",[4996],"knorre",{"type":12,"value":4998,"toc":5046},[4999,5002,5005,5008,5011,5016,5022,5025,5028,5031,5037,5040,5043],[15,5000,4994],{"id":5001},"nun-werde-ich-zum-fachinformatikersystemintegration-gemacht",[19,5003,5004],{},"Mein Name ist Matthias Knorre und ich konnte mir nach einem 4-tägigen Praktikum bei der Systemadministration von Synyx,\nwährend dem ich meine Programmier-Erfahrung zeigen durfte, eine Stelle als Azubi der Fachrichtung\n“Fachinformatiker/Systemintegration” ergattern.",[19,5006,5007],{},"Die Ausbildung begann vor zwei Wochen, in denen ich bereits den größten Teil der Firmen-Angehörigen besser kennenlernen\nkonnte, da bereits am Ende der ersten Woche die alljährliche Firmen-Sommerfeierei stattfand. Eine grandiose Möglichkeit\nalso, sich als “Neuer” vorzustellen und mit den Kollegen in’s Gespräch zu kommen.",[19,5009,5010],{},"Nach ersten Einführungen in die Systeme und deren Architektur konnte ich mich ab der zweiten Woche in mein erstes\nProjekt einarbeiten:",[19,5012,5013],{},[67,5014,5015],{},"Temperaturüberwachung unserer Server per 1-Wire-Bus.",[19,5017,5018],{},[36,5019],{"alt":5020,"src":5021},"\"alpha-Prototyp\"","https://media.synyx.de/uploads//2011/08/testaufbau_1.png",[19,5023,5024],{},"Erster Versuchsaufbau",[19,5026,5027],{},"Dazu begann ich zunächst unter fachkundiger Anleitung meines Ausbilders Max Ferstl nach Bauteilen und\nAnwendungs-Beispielen im Netz zu suchen. So verglich ich verschiedene Versuchsaufbauten anderer Projekte, Preise der\nBauteile bei diversen Anbietern sowie mögliche Leitungswege und Steckverbindungen hier im Haus.",[19,5029,5030],{},"Schließlich entschieden wir uns für einen Versuchsaufbau mittels BreadBoard (Steckbrett) und Anbindung durch einen\nvorkonfektionierten USB\u003C->1-Wire Adapter (1-Wire Bus Master), um Fehlerquellen auszuschließen.",[19,5032,5033],{},[36,5034],{"alt":5035,"src":5036},"\"USB to 1Wire\"","https://media.synyx.de/uploads//2011/08/USB-1Wire.jpg",[19,5038,5039],{},"1-Wire Bus Master",[19,5041,5042],{},"Nach erfolgreichem Test des alpha-Prototyps und der Einbindung des OneWireFileSystems (OWFS) in mein System konnte ich\nnach kurzer Zeit bereits die erste Temperaturabfrage eines Sensors starten. Auch der Versuch zwei weitere Sensoren\nmittels HotPlug (Anschluss im laufenden Betrieb) einzubinden war erfolgreich.",[19,5044,5045],{},"Somit steht dem Übergang in die Beta-Phase nichts mehr im Wege. Für den Anfang sollten 10 Sensoren an einem Verteiler\ngenügen, um die Funktion in einem der Serverschränke in unserer Nähe zu realisieren. Für die endgültige Version der\nTemperaturüberwachung ist eine Einbindung in die Nagios-Systemüberwachung unserer Firma vorgesehen.",{"title":38,"searchDepth":197,"depth":197,"links":5047},[],[206],"2011-08-15T10:03:09","Mein Name ist Matthias Knorre und ich konnte mir nach einem 4-tägigen Praktikum bei der Systemadministration von Synyx,\\nwährend dem ich meine Programmier-Erfahrung zeigen durfte, eine Stelle als Azubi der Fachrichtung\\n“Fachinformatiker/Systemintegration” ergattern.","https://synyx.de/blog/nun-werde-ich-zum-fachinformatikersystemintegration-gemacht/",{},"/blog/nun-werde-ich-zum-fachinformatikersystemintegration-gemacht",{"title":4994,"description":5004},"blog/nun-werde-ich-zum-fachinformatikersystemintegration-gemacht",[219],"Mein Name ist Matthias Knorre und ich konnte mir nach einem 4-tägigen Praktikum bei der Systemadministration von Synyx, während dem ich meine Programmier-Erfahrung zeigen durfte, eine Stelle als Azubi der…","GI4Ap0Igh9LnqT0bQCI0kyxDa9OYKHo9hu_TWGh9t9g",{"id":5060,"title":5061,"author":5062,"body":5064,"category":5181,"date":5182,"description":5071,"extension":209,"link":5183,"meta":5184,"navigation":212,"path":5185,"seo":5186,"slug":5187,"stem":5188,"tags":5189,"teaser":5190,"__hash__":5191},"blog/blog/betriebspraktikum-die-nachste.md","Betriebspraktikum, die nächste…..",[5063],"gast",{"type":12,"value":5065,"toc":5179},[5066,5069,5072,5075,5078,5081,5089,5092,5095,5098,5101,5104,5107,5110,5113,5116,5119,5122,5125,5128,5131,5134,5137,5140,5143,5146,5149,5152,5155,5158,5161,5164,5167,5170,5173,5176],[15,5067,5061],{"id":5068},"betriebspraktikum-die-nächste",[19,5070,5071],{},"Hallo zusammen,",[19,5073,5074],{},"ich heiße Steffen Welp und habe heute den letzten",[19,5076,5077],{},"Tag meines 14-tägigen Praktikums als Fachinformatiker",[19,5079,5080],{},"für Systemintegration.",[19,5082,5083,5084],{},"Der Kontakt kam durch meine Bewerbung beim ",[80,5085,5088],{"href":5086,"rel":5087},"http://cyberforum.de/",[84],"Cyberforum e.V.",[19,5090,5091],{},"in Karlsruhe zustande. Dieser hatte zum Meet`n Greet zwischen",[19,5093,5094],{},"Bewerbern und ausbildenden Unternehmen eingeladen.",[19,5096,5097],{},"Dabei lernte ich Herrn Ferstl kennen, welcher mich spontan",[19,5099,5100],{},"zu einem weiteren Gespräch in den Geschäftsräumen der",[19,5102,5103],{},"Firma einlud. Bei diesem zweiten Treffen wurde dann der",[19,5105,5106],{},"Praktikumstermin vereinbart.",[19,5108,5109],{},"In den letzten beiden Wochen hatte ich nun das Glück",[19,5111,5112],{},"dem Treiben in der Firma beiwohnen zu dürfen und bin nachhaltig",[19,5114,5115],{},"schwer begeistert.",[19,5117,5118],{},"Zu Beginn wurde ich mit den Basics des Shellbedienung und",[19,5120,5121],{},"auch des -programmierens innerhalb von Linux vertraut gemacht.",[19,5123,5124],{},"Dies habe ich auch im Eigenstudium dann bis heute weitergeführt,",[19,5126,5127],{},"und werde es wohl auch privat fortsetzen.",[19,5129,5130],{},"Als weiteres konnte ich meinen beiden Kollegen Herrn Ferstl und",[19,5132,5133],{},"Herrn Ruessel täglich über die Schulter schauen. Beide waren",[19,5135,5136],{},"immer hilfsbereit und haben mir bei Schwierigkeiten stets unter",[19,5138,5139],{},"die Arme gegriffen. Abschließend stand in der zweiten Woche noch",[19,5141,5142],{},"die Wartung der Hardware an, damit diese an warmen Sommertagen",[19,5144,5145],{},"auch weiterhin zuverlässig arbeitet.",[19,5147,5148],{},"Vielen Dank an alle Mitarbeiter und -streiter der Synyx GmbH",[19,5150,5151],{},"für die freundliche Aufnahme und der Hilfestellung bei allen",[19,5153,5154],{},"wichtigen Fragen!",[19,5156,5157],{},"Diese 14 Tage haben mich in der Wahl meines gewünschten Berufs-",[19,5159,5160],{},"bildes bestätigt und ich würde mich sehr freuen, dürfte ich mit",[19,5162,5163],{},"ins Boot springen und im September hier eine Umschulung beginnen!",[19,5165,5166],{},"Ich drück der Synyx GmbH ganz fest die Daumen, daß ihr Konzept",[19,5168,5169],{},"weiterhin aufgehen möge und sie der IT-Welt noch lange erhalten",[19,5171,5172],{},"bleiben.",[19,5174,5175],{},"Gruß",[19,5177,5178],{},"Steffen Welp",{"title":38,"searchDepth":197,"depth":197,"links":5180},[],[206],"2010-06-24T19:18:02","https://synyx.de/blog/betriebspraktikum-die-nachste/",{},"/blog/betriebspraktikum-die-nachste",{"title":5061,"description":5071},"betriebspraktikum-die-nachste","blog/betriebspraktikum-die-nachste",[],"Hallo zusammen, ich heiße Steffen Welp und habe heute den letzten Tag meines 14-tägigen Praktikums als Fachinformatiker für Systemintegration. Der Kontakt kam durch meine Bewerbung beim Cyberforum e.V. in Karlsruhe…","nlVhNewBHrUOxxvshGyRF4Di5V3AuzROWQe9qCqwHE0",{"id":5193,"title":5194,"author":5195,"body":5197,"category":5222,"date":5223,"description":5204,"extension":209,"link":5224,"meta":5225,"navigation":212,"path":5226,"seo":5227,"slug":5201,"stem":5228,"tags":5229,"teaser":5230,"__hash__":5231},"blog/blog/jetzt-ist-es-nicht-mehr-weit.md","Jetzt ist es nicht mehr weit",[5196],"ruessel",{"type":12,"value":5198,"toc":5220},[5199,5202,5205,5211,5214,5217],[15,5200,5194],{"id":5201},"jetzt-ist-es-nicht-mehr-weit",[19,5203,5204],{},"… bis zum Ende meiner dreijährigen Ausbildung zum Fachinformatiker Systemintegration.",[19,5206,5207,5208],{},"Gestern durfte ich im Rahmen einer feierlichen Abschlusszeremonie in der Heinrich-Hertz-Schule, mit live-Musik und\nmehr oder weniger spannenden Reden von verschiedenen Vertretern der Schule, der IHK, und Ausbildungsbetrieben, mein\nAbschlusszeugnis, welches das Bestehen der Abschlussprüfung bescheinigt, entgegen nehmen. ",[26,5209,5210],{},"freu",[19,5212,5213],{},"Einen kleinen Wermutstropfen birgt die Sache dann doch, das war nun das allerletzte mal (offiziell zumindest) mit den\nJungs aus meiner Klasse und den Lehrern und Lehrerinnen der HHS, ja es gab/gibt einige die man wirklich vermisst. Ich\nwerde noch lange Geschichten erzählen können, die mit “Und einmal in der Berufsschule…” anfangen.",[19,5215,5216],{},"Aber jetzt heißt es noch einmal “Daumen drücken”, am 22. Juli findet die Abschlusspräsentation meines\nAbschlussprojektes vor der IHK und ein anschliessendes Fachgespräch (man wird gelöchert ob man sich denn wirklich mit\nder Materie befasst hat) statt.",[19,5218,5219],{},"Anschließend werde ich aller Voraussicht nach das Team Synyx (Fußball-Metaphern sind derzeit so modisch)auch in\nZukunft, dann aber als vollwertiger Informatiker, tatkräftig unterstützen.",{"title":38,"searchDepth":197,"depth":197,"links":5221},[],[206],"2010-06-24T17:59:37","https://synyx.de/blog/jetzt-ist-es-nicht-mehr-weit/",{},"/blog/jetzt-ist-es-nicht-mehr-weit",{"title":5194,"description":5204},"blog/jetzt-ist-es-nicht-mehr-weit",[219,4640,767],"… bis zum Ende meiner dreijährigen Ausbildung zum Fachinformatiker Systemintegration. Gestern durfte ich im Rahmen einer feierlichen Abschlusszeremonie in der Heinrich-Hertz-Schule, mit live-Musik und mehr oder weniger spannenden Reden von…","eqs59GmC_MqY6ddSa-ppoDdT4Ai0pnS5G8wvpTsg-cA",{"id":5233,"title":5234,"author":5235,"body":5236,"category":5261,"date":5262,"description":5243,"extension":209,"link":5263,"meta":5264,"navigation":212,"path":5265,"seo":5266,"slug":5240,"stem":5267,"tags":5268,"teaser":5270,"__hash__":5271},"blog/blog/praktikum-bei-synyx.md","Praktikum bei Synyx",[5063],{"type":12,"value":5237,"toc":5259},[5238,5241,5244,5247,5250,5253,5256],[15,5239,5234],{"id":5240},"praktikum-bei-synyx",[19,5242,5243],{},"Hallo, mein Name ist Sebastian Schulte (Basti) und ich habe hier gerade ein einwöchiges Praktikum absolviert.",[19,5245,5246],{},"Der Kontakt zu Synyx kam durch Max Ferstl zustande, der in dieser Zeit auch mein “direkter Vorgesetzter” war. Durch ihn\nhabe ich einerseits von der im September frei werdenden Azubi-Stelle als auch von der angenehmen Arbeits-Atmosphäre\nhier erfahren, von der ich mich ja dann auch selbst überzeugen konnte.",[19,5248,5249],{},"Obwohl ich bisher nur sehr wenig / gar keine IT-Erfahrung vorweisen kann, wollte ich mir die Chance zumindest mal\nreinzuschauen nicht entgehen lassen.",[19,5251,5252],{},"Nachdem ein Termin gefunden war (“Komm einfach vorbei” 🙂 ), richteten wir zunächst meinen Arbeitsplatz ein, von dem aus\nich in den kommenden Tagen einen Praktikums-Rechner aufsetzte, Apache und Tomcat installierte und erste Erfahrungen\ndamit sammelte. Aufgrund meines geringen Vorwissens (z.B. erstes Arbeiten mit einer Text-Konsole) gestaltete sich der\nAnfang recht langwierig und ich verbrachte wohl die meiste Zeit auf google, um nicht alle fünf Minuten nachfragen zu\nmüssen ^^. Natürlich wurden meine Fragen trotzdem beantwortet und so konnte ich mich langsam “durchwursteln”.",[19,5254,5255],{},"Abschließend kann ich sagen, daß mir in dieser Woche ein kleiner Einblick in die Thematik gewährt und dadurch auch mein\nInteresse daran geweckt wurde. In besonderer Erinnerung wird mir aber auf jeden Fall die gute Stimmung und die\nUnkompliziertheit hier bleiben. Obwohl ich nur mit den SysAdmins direkt zu tun hatte, hat mir das gesamte Umfeld, das\nunbürokratische und entspannte Miteinander sehr gut gefallen!",[19,5257,5258],{},"Hoffentlich bis bald! Basti",{"title":38,"searchDepth":197,"depth":197,"links":5260},[],[206],"2010-06-08T16:21:34","https://synyx.de/blog/praktikum-bei-synyx/",{},"/blog/praktikum-bei-synyx",{"title":5234,"description":5243},"blog/praktikum-bei-synyx",[5269],"praktikum","Hallo, mein Name ist Sebastian Schulte (Basti) und ich habe hier gerade ein einwöchiges Praktikum absolviert. Der Kontakt zu Synyx kam durch Max Ferstl zustande, der in dieser Zeit auch…","yEaV5rTt3J7BLdn-e6UGu2Jm6o8yHRQ8SLMC2V-mdKQ",{"id":5273,"title":5274,"author":5275,"body":5276,"category":5379,"date":5380,"description":5381,"extension":209,"link":5382,"meta":5383,"navigation":212,"path":5384,"seo":5385,"slug":5280,"stem":5386,"tags":5387,"teaser":5392,"__hash__":5393},"blog/blog/redmineupgrade-ruby-on-debian-without-leaving-the-rails.md","RedmineUpgrade – Ruby on Debian without leaving the rails",[5196],{"type":12,"value":5277,"toc":5377},[5278,5281,5284,5287,5295,5298,5303,5316,5319,5322,5325,5328,5348,5351,5357,5360,5368,5371,5374],[15,5279,5274],{"id":5280},"redmineupgrade-ruby-on-debian-without-leaving-the-rails",[19,5282,5283],{},"Auf der Suche nach “dem Ticketsystem” sind wir nach Scarab und Trac auf Redmine gestossen, einer Ruby-on-rails\napplication, die ihren Zweck erfüllt und unseren Bedürfnissen durchaus gerecht wird. Aber da Redmine glücklicherweise\nauch weiterentwickelt wird, verlangt auch diese Applikation hin und wieder ein Upgrade (dieses mal war es ein\nVersionssprung von 0.8.7 auf 0.9.4).",[19,5285,5286],{},"Das Setup:",[258,5288,5289,5292],{},[261,5290,5291],{},"Debian GNU/Linux 5.0",[261,5293,5294],{},"Apache2.2 mit Phusion Passenger (a.k.a. mod_rails; mod_fcgi oder mod_fastcgi sind eher keine gelungen Apache-Module,\ndas liegt wohl in der Natur von fcgi 😉 )",[19,5296,5297],{},"Nun sind schon bei vergangenen Updates verschiedene Stolpersteine ans Tageslicht gekommen, einige erwiesen sich\nallerdings als ein und der selbe:",[19,5299,5300],{},[26,5301,5302],{},"An der Debian-Paket-Verwaltung vorbei(!) die richtigen Versionen (wie im Redmine-Upgrade-Tutorial genannt)\ninstallieren",[258,5304,5305],{},[261,5306,5307,5308,5311,5312],{},"rubygems – wichtig hierbei ",[67,5309,5310],{},"nicht"," das Paket “rubygems1.8” aus dem Debian-Repository verwenden sondern von Hand\ninstallieren: `wget ",[80,5313,5314],{"href":5314,"rel":5315},"http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz",[84],[19,5317,5318],{},"tar xzf rubygems-1.3.1.tgz",[19,5320,5321],{},"cd rubygems-1.3.1",[19,5323,5324],{},"sudo ruby setup.rb",[19,5326,5327],{},"gem -v`",[258,5329,5330,5339],{},[261,5331,5332,5333,5335,5336],{},"Rake – auch hier gilt ",[67,5334,5310],{}," das Paket “rake” v=0.7.1-1 aus dem Debian-Repository verwenden. Man nutze den\n“Ruby-way”: ",[488,5337,5338],{},"gem install rake -v=0.8.3",[261,5340,5341,5342,5344,5345],{},"rails – guess what… richtig, ",[67,5343,5310],{}," das Paket “rails” aus dem Debian-Repository verwenden. Man nutze abermals den\n“Ruby-way”: ",[488,5346,5347],{},"gem install rails -v=2.3.5",[19,5349,5350],{},"Nachdem die Gleise damit verlegt sind, funktioniert auch der Upgrade-Guide wie gewünscht.",[19,5352,5353,5354],{},"Wenn der kritische “point of no return” ",[488,5355,5356],{},"rake db:migrate RAILS_ENV=production",[19,5358,5359],{},"überstanden ist, die neue Version von Redmine gestartet wurde, aber dann Dinge wie:",[258,5361,5362,5365],{},[261,5363,5364],{},"“*** Exception NoMethodError in application (undefined method…”",[261,5366,5367],{},"“Premature end of script headers…”",[19,5369,5370],{},"im Apache-Errorlog auftauchen oder man die Meldung “application could not be started…” im Browser sieht,dann hilft ein\nUpdate von Phusion Passenger (auf Version 2.2.11 ): `gem install passenger",[19,5372,5373],{},"passenger-install-apache2-module`",[19,5375,5376],{},"Sobald auch die letzten Anweisungen der Installation befolgt worden sind, können die Bugs kommen.",{"title":38,"searchDepth":197,"depth":197,"links":5378},[],[206],"2010-05-07T09:05:46","Auf der Suche nach “dem Ticketsystem” sind wir nach Scarab und Trac auf Redmine gestossen, einer Ruby-on-rails\\napplication, die ihren Zweck erfüllt und unseren Bedürfnissen durchaus gerecht wird. Aber da Redmine glücklicherweise\\nauch weiterentwickelt wird, verlangt auch diese Applikation hin und wieder ein Upgrade (dieses mal war es ein\\nVersionssprung von 0.8.7 auf 0.9.4).","https://synyx.de/blog/redmineupgrade-ruby-on-debian-without-leaving-the-rails/",{},"/blog/redmineupgrade-ruby-on-debian-without-leaving-the-rails",{"title":5274,"description":5283},"blog/redmineupgrade-ruby-on-debian-without-leaving-the-rails",[5388,5389,5390,5391],"apache","bug","debian","ruby","Auf der Suche nach “dem Ticketsystem” sind wir nach Scarab und Trac auf Redmine gestossen, einer Ruby-on-rails application, die ihren Zweck erfüllt und unseren Bedürfnissen durchaus gerecht wird. Aber da…","kojvi8lS66BVvtV-_dEKfjXkUvQ2IgNFu8PR1xO5XFA",{"id":5395,"title":5396,"author":5397,"body":5398,"category":5497,"date":5498,"description":5405,"extension":209,"link":5499,"meta":5500,"navigation":212,"path":5501,"seo":5502,"slug":5402,"stem":5503,"tags":5504,"teaser":5505,"__hash__":5506},"blog/blog/ausbildungsplatz-zum-fachinformatikerin-systemintegeration.md","Ausbildungsplatz zum Fachinformatiker/in Systemintegeration",[4617],{"type":12,"value":5399,"toc":5495},[5400,5403,5406,5410,5424,5428,5445,5449,5463,5467,5478,5486,5489,5492],[15,5401,5396],{"id":5402},"ausbildungsplatz-zum-fachinformatikerin-systemintegeration",[19,5404,5405],{},"Wir haben noch einen Ausbildungsplatz als Fachinformatiker/in Systemintegration ab September 2010 zu vergeben.",[278,5407,5409],{"id":5408},"deine-aufgaben","Deine Aufgaben:",[258,5411,5412,5415,5418,5421],{},[261,5413,5414],{},"Unterstützung bei der Planung und Erweiterung unserer Infrastruktur",[261,5416,5417],{},"Inbetriebnahme, Betreuung und Überwachung unserer Systeme (Debian, Ubuntu, SuSE, Windows 2000, Windows XP)",[261,5419,5420],{},"Unterstützen unserer Mitarbeiter bei technischen Problemen",[261,5422,5423],{},"Unterstützung von Kunden bei Software- und Hardwareproblemen",[278,5425,5427],{"id":5426},"unsere-anforderungen","Unsere Anforderungen:",[258,5429,5430,5433,5436,5439,5442],{},[261,5431,5432],{},"Mittlere Reife oder Hochschulreife",[261,5434,5435],{},"Gute Englischkenntnisse in Wort und Schrift",[261,5437,5438],{},"Erfahrungen in Netzwerktechnik, TCP/IP",[261,5440,5441],{},"Gute EDV-Kenntnisse",[261,5443,5444],{},"Grundkenntnisse im Bereich Linux",[278,5446,5448],{"id":5447},"das-solltest-du-mitbringen","Das solltest Du mitbringen:",[258,5450,5451,5454,5457,5460],{},[261,5452,5453],{},"Eigeninitiative und Engagement",[261,5455,5456],{},"Teamfähigkeit",[261,5458,5459],{},"Freude am Umgang mit neuen Technologien",[261,5461,5462],{},"Entschlossenheit, Lösungen für Probleme zu finden",[278,5464,5466],{"id":5465},"das-erwartet-dich","Das erwartet Dich:",[258,5468,5469,5472,5475],{},[261,5470,5471],{},"Ein junges, innovatives Team",[261,5473,5474],{},"Ein technologisch spannendes Umfeld",[261,5476,5477],{},"Flexible, eigenständige, verantwortungsvolle Tätigkeiten",[19,5479,5480,5481,5485],{},"Bewerbungen bitte per Mail an ",[80,5482,5484],{"href":5483},"mailto:admin@synyx.de","admin@synyx.de"," oder per Post an:",[19,5487,5488],{},"Synyx GmbH & Co. KG",[19,5490,5491],{},"Karlstraße 68",[19,5493,5494],{},"D-76137 Karlsruhe",{"title":38,"searchDepth":197,"depth":197,"links":5496},[],[206],"2010-05-03T11:08:44","https://synyx.de/blog/ausbildungsplatz-zum-fachinformatikerin-systemintegeration/",{},"/blog/ausbildungsplatz-zum-fachinformatikerin-systemintegeration",{"title":5396,"description":5405},"blog/ausbildungsplatz-zum-fachinformatikerin-systemintegeration",[219,4640,767],"Wir haben noch einen Ausbildungsplatz als Fachinformatiker/in Systemintegration ab September 2010 zu vergeben. Deine Aufgaben: Unterstützung bei der Planung und Erweiterung unserer Infrastruktur Inbetriebnahme, Betreuung und Überwachung unserer Systeme (Debian,…","exUqJwKlx_VsMnsLbWd_obLbh3PP-k1D2p81qk_HnbU",[5508,5511,5513,5516,5519,5522,5525,5528,5531,5533,5536,5539,5542,5545,5548,5551,5554,5556,5559,5562,5565,5568,5570,5573,5576,5579,5582,5584,5587,5590,5592,5595,5598,5601,5604,5607,5609,5612,5615,5618,5621,5624,5627,5630,5633,5636,5638,5641,5644,5647,5650,5653,5656,5659,5662,5665,5668,5670,5673,5676,5679,5682,5685,5687,5690,5692,5695,5698,5701,5704,5707,5710,5713,5716,5719,5722,5725,5728,5730,5733,5736,5739,5742,5745,5748,5751,5754,5757,5760,5763,5766,5769,5772,5775,5778,5781,5784,5787,5790,5792,5795,5798,5801,5804,5806,5808,5811,5814,5817,5820,5823,5826,5829,5832,5835,5838,5841,5844,5847,5850,5853,5856,5859,5862,5865,5868,5871,5874,5877,5880,5881,5884,5887,5890,5893,5896,5899,5902,5905,5908,5911,5914],{"slug":5509,"name":5510},"abel","Jennifer Abel",{"slug":4647,"name":5512},"Otto Allmendinger",{"slug":5514,"name":5515},"antony","Ben Antony",{"slug":5517,"name":5518},"arrasz","Joachim Arrasz",{"slug":5520,"name":5521},"bauer","David Bauer",{"slug":5523,"name":5524},"bechtold","Janine Bechtold",{"slug":5526,"name":5527},"boersig","Jasmin Börsig",{"slug":5529,"name":5530},"buch","Fabian Buch",{"slug":470,"name":5532},"Aljona Buchloh",{"slug":5534,"name":5535},"burgard","Julia Burgard",{"slug":5537,"name":5538},"caspar-schwedes","Caspar Schwedes",{"slug":5540,"name":5541},"christina-schmitt","Christina Schmitt",{"slug":5543,"name":5544},"clausen","Michael Clausen",{"slug":5546,"name":5547},"contargo_poetzsch","Thomas Pötzsch",{"slug":5549,"name":5550},"damrath","Sebastian Damrath",{"slug":5552,"name":5553},"daniel","Markus Daniel",{"slug":227,"name":5555},"Julia Dasch",{"slug":5557,"name":5558},"denman","Joffrey Denman",{"slug":5560,"name":5561},"dfuchs","Daniel Fuchs",{"slug":5563,"name":5564},"dobler","Max Dobler",{"slug":5566,"name":5567},"dobriakov","Vladimir Dobriakov",{"slug":5569,"name":5569},"dreiqbik",{"slug":5571,"name":5572},"dschaefer","Denise Schäfer",{"slug":5574,"name":5575},"dschneider","Dominik Schneider",{"slug":5577,"name":5578},"duerlich","Isabell Duerlich",{"slug":5580,"name":5581},"dutkowski","Bernd Dutkowski",{"slug":5583,"name":5583},"eifler",{"slug":5585,"name":5586},"essig","Tim Essig",{"slug":5588,"name":5589},"ferstl","Maximilian Ferstl",{"slug":10,"name":5591},"Prisca Fey",{"slug":5593,"name":5594},"frank","Leonard Frank",{"slug":5596,"name":5597},"franke","Arnold Franke",{"slug":5599,"name":5600},"frischer","Nicolette Rudmann",{"slug":5602,"name":5603},"fuchs","Petra Fuchs",{"slug":5605,"name":5606},"gari","Sarah Gari",{"slug":5063,"name":5608},"Gast",{"slug":5610,"name":5611},"graf","Johannes Graf",{"slug":5613,"name":5614},"grammlich","Daniela Grammlich",{"slug":5616,"name":5617},"guthardt","Sabrina Guthardt",{"slug":5619,"name":5620},"haeussler","Johannes Häussler",{"slug":5622,"name":5623},"hammann","Daniel Hammann",{"slug":5625,"name":5626},"heetel","Julian Heetel",{"slug":5628,"name":5629},"heft","Florian Heft",{"slug":5631,"name":5632},"heib","Sebastian Heib",{"slug":5634,"name":5635},"heisler","Ida Heisler",{"slug":9,"name":5637},"Patrick Helm",{"slug":5639,"name":5640},"herbold","Michael Herbold",{"slug":5642,"name":5643},"hofmann","Peter Hofmann",{"slug":5645,"name":5646},"hopf","Florian Hopf",{"slug":5648,"name":5649},"jaud","Alina Jaud",{"slug":5651,"name":5652},"jayasinghe","Robin De Silva Jayasinghe",{"slug":5654,"name":5655},"jbuch","Jonathan Buch",{"slug":5657,"name":5658},"junghanss","Gitta Junghanß",{"slug":5660,"name":5661},"kadyietska","Khrystyna Kadyietska",{"slug":5663,"name":5664},"kannegiesser","Marc Kannegiesser",{"slug":5666,"name":5667},"karoly","Robert Károly",{"slug":4617,"name":5669},"Katja Arrasz-Schepanski",{"slug":5671,"name":5672},"kaufmann","Florian Kaufmann",{"slug":5674,"name":5675},"kesler","Mike Kesler",{"slug":5677,"name":5678},"kirchgaessner","Bettina Kirchgäßner",{"slug":5680,"name":5681},"klem","Yannic Klem",{"slug":5683,"name":5684},"klenk","Timo Klenk",{"slug":3543,"name":5686},"Tobias Knell",{"slug":5688,"name":5689},"knoll","Anna-Lena Knoll",{"slug":4996,"name":5691},"Matthias Knorre",{"slug":5693,"name":5694},"koenig","Melanie König",{"slug":5696,"name":5697},"kraft","Thomas Kraft",{"slug":5699,"name":5700},"krupicka","Florian Krupicka",{"slug":5702,"name":5703},"kuehn","Christian Kühn",{"slug":5705,"name":5706},"lange","Christian Lange",{"slug":5708,"name":5709},"larrasz","Luca Arrasz",{"slug":5711,"name":5712},"leist","Sascha Leist",{"slug":5714,"name":5715},"lihs","Michael Lihs",{"slug":5717,"name":5718},"linsin","David Linsin",{"slug":5720,"name":5721},"maniyar","Christian Maniyar",{"slug":5723,"name":5724},"martin","Björnie",{"slug":5726,"name":5727},"martin-koch","Martin Koch",{"slug":3152,"name":5729},"Tobias Matt",{"slug":5731,"name":5732},"mennerich","Christian Mennerich",{"slug":5734,"name":5735},"menz","Alexander Menz",{"slug":5737,"name":5738},"meseck","Frederick Meseck",{"slug":5740,"name":5741},"messner","Oliver Messner",{"slug":5743,"name":5744},"michael-ploed","Michael Plöd",{"slug":5746,"name":5747},"mies","Marius Mies",{"slug":5749,"name":5750},"mihai","Alina Mihai",{"slug":5752,"name":5753},"moeller","Jörg Möller",{"slug":5755,"name":5756},"mohr","Rebecca Mohr",{"slug":5758,"name":5759},"moretti","David Moretti",{"slug":5761,"name":5762},"mueller","Sven Müller",{"slug":5764,"name":5765},"muessig","Alexander Müssig",{"slug":5767,"name":5768},"neupokoev","Grigory Neupokoev",{"slug":5770,"name":5771},"nussbaecher","Carmen Nussbächer",{"slug":5773,"name":5774},"ochs","Pascal Ochs",{"slug":5776,"name":5777},"oelhoff","Jan Oelhoff",{"slug":5779,"name":5780},"oengel","Yasin Öngel",{"slug":5782,"name":5783},"oezsoy","Enis Özsoy",{"slug":5785,"name":5786},"posch","Maya Posch",{"slug":5788,"name":5789},"ralfmueller","Ralf Müller",{"slug":5791,"name":5791},"redakteur",{"slug":5793,"name":5794},"reich","Michael Reich",{"slug":5796,"name":5797},"reinhard","Karl-Ludwig Reinhard",{"slug":5799,"name":5800},"rmueller","Rebecca Müller",{"slug":5802,"name":5803},"rosum","Jan Rosum",{"slug":5805,"name":5805},"rueckert",{"slug":5196,"name":5807},"Sascha Rüssel",{"slug":5809,"name":5810},"sauter","Moritz Sauter",{"slug":5812,"name":5813},"schaefer","Julian Schäfer",{"slug":5815,"name":5816},"scherer","Petra Scherer",{"slug":5818,"name":5819},"schlicht","Anne Schlicht",{"slug":5821,"name":5822},"schmidt","Jürgen Schmidt",{"slug":5824,"name":5825},"schneider","Tobias Schneider",{"slug":5827,"name":5828},"seber","Benjamin Seber",{"slug":5830,"name":5831},"sommer","Marc Sommer",{"slug":5833,"name":5834},"speaker-fels","Jakob Fels",{"slug":5836,"name":5837},"speaker-gierke","Oliver Gierke",{"slug":5839,"name":5840},"speaker-krupa","Malte Krupa",{"slug":5842,"name":5843},"speaker-mader","Jochen Mader",{"slug":5845,"name":5846},"speaker-meusel","Tim Meusel",{"slug":5848,"name":5849},"speaker-milke","Oliver Milke",{"slug":5851,"name":5852},"speaker-paluch","Mark Paluch",{"slug":5854,"name":5855},"speaker-schad","Jörg Schad",{"slug":5857,"name":5858},"speaker-schalanda","Jochen Schalanda",{"slug":5860,"name":5861},"speaker-schauder","Jens Schauder",{"slug":5863,"name":5864},"speaker-unterstein","Johannes Unterstein",{"slug":5866,"name":5867},"speaker-wolff","Eberhard Wolff",{"slug":5869,"name":5870},"speaker-zoerner","Stefan Zörner",{"slug":5872,"name":5873},"stefan-belger","Stefan Belger",{"slug":5875,"name":5876},"steinegger","Roland Steinegger",{"slug":5878,"name":5879},"stern","sternchen synyx",{"slug":767,"name":767},{"slug":5882,"name":5883},"szulc","Mateusz Szulc",{"slug":5885,"name":5886},"tamara","Tamara Tunczinger",{"slug":5888,"name":5889},"theuer","Tobias Theuer",{"slug":5891,"name":5892},"thieme","Sandra Thieme",{"slug":5894,"name":5895},"thies-clasen","Marudor",{"slug":5897,"name":5898},"toernstroem","Olle Törnström",{"slug":5900,"name":5901},"ullinger","Max Ullinger",{"slug":5903,"name":5904},"ulrich","Stephan Ulrich",{"slug":5906,"name":5907},"wagner","Stefan Wagner",{"slug":5909,"name":5910},"weigel","Andreas Weigel",{"slug":5912,"name":5913},"werner","Fabian Werner",{"slug":5915,"name":5916},"wolke","Sören Wolke",["Reactive",5918],{"$scookieConsent":5919,"$ssite-config":5921},{"functional":5920,"analytics":5920},false,{"_priority":5922,"env":5926,"name":5927,"url":5928},{"name":5923,"env":5924,"url":5925},-10,-15,0,"production","nuxt-app","https://synyx.de",["Set"],["ShallowReactive",5931],{"category-azubi-blog":-1,"authors":-1},"/blog/kategorien/azubi-blog"]