text:
Grupo BIG Brasil S.A., fazendo negócios como Grupo BIG, foi uma empresa joint venture com atuação no comércio varejista brasileira controlada pela firma de private equity Advent, em sociedade com o Walmart. Dona de várias das principais marcas do setor no Brasil, sendo integrantes de seu portfólio negócios como o BIG, BIG Bompreço, Super Bompreço, TodoDia, Maxxi Atacado, Sam's Club e Nacional. Foi a terceira maior empresa varejista, de acordo com o ranking da Sociedade Brasileira de Varejo e Comércio de 2018,  contando com 438 lojas e 55.000 funcionários.  De agosto de 2019 até seu encerramento, utilizou a marca Grupo BIG, em substituição ao nome anteriormente utilizado, Walmart Brasil.

Encerrou suas atividades em 7 de junho de 2022, quando foi incorporado ao Carrefour Brasil.

História

Antecedentes
A empresa surgiu a partir da abertura do primeiro Sam's Club no país, pela rede Walmart em 1995. Logo em seguida, abriu a primeira loja focada no segmento de hipermercados na cidade de Osasco, em São Paulo, ainda em 1995. A rede começou a expansão pela região Sudeste nos anos que se sucederam.

Em março de 2004, adquiriu a rede Bompreço, de propriedade do holandês Royal Ahold, por US$ 300 milhões. A aquisição trouxe 118 novos pontos de venda. Com a aquisição, o grupo norte-americano pulou da sexta para a terceira posição no ranking dos maiores supermercadistas brasileiros. Concomitante a isso, o brasileiro Unibanco adquiriu a Hipercard, divisão responsável por administrar os cartões private label do Bompreço. A aquisição custou US$ 215 milhões e acrescentou cerca de 2,3 milhões de clientes a carteira do banco brasileiro.

No final de 2005, o grupo adquiriu a operação de varejo do Sonae no Brasil. A aquisição englobou as marcas BIG, Mercadorama, Nacional e Maxxi e custou R$ 1,7 bilhão. Á época da aquisição, o Sonae tinha 135 lojas, nos estados de Santa Catarina, Paraná e Rio Grande do Sul, e faturamento bruto da ordem de R$ 4,33 bilhões.

Em 2011, trouxe para o Brasil a estratégia de preço que o levou a conquistar o mercado nos Estados Unidos e a tornar-se o maior varejista do mundo: o "Preço Baixo Todo Dia" (PBTD). Única no mercado brasileiro, essa estratégia buscava comunicar ao consumidor um compromisso de preço baixo constante no total da cesta de compra. Em sete anos, se investiu forte na comunicação do PBTD e no formato hipermercado.

No fim de 2016, a matriz norte-americana sinalizou que poderia incluir o Brasil em seu plano de desinvestimentos. A filial brasileira amargou prejuízos por 7 dos 10 anos anteriores. Os problemas na filial brasileira eram estruturais, pois o sistema de hierarquia imposto pela matriz não se adaptou ao mercado brasileiro. Sistemas usados da matriz, por exemplo, não se adaptavam ao modelo tributário brasileiro. Outro erro do grupo, segundo especialistas, foi a demora para absorver as marcas regionais adquiridas (do Bompreço, em 2004, e do Sonae, em 2005). O grupo ainda investiu pesado em hipermercados, em um momento que as lojas de atacarejos começaram a se tornar cada vez mais comuns.

Venda para o Advent e fim do Walmart Brasil
Em junho de 2018, a rede foi vendida para a empresa de private equity Advent. Na ocasião, a matriz norte-americana ainda possuía uma participação minoritária de 20% na nova empresa. No segundo trimestre de 2018, a rede americana relatou perdas líquidas com a operação brasileira da ordem de US$ 4,5 bilhões. Posteriormente, foi noticiado que a aquisição da filial brasileira não teve custo algum, com o Advent se comprometendo a investir cerca de R$ 2 bilhões na recém adquirida operação.

Em maio de 2019, o varejo on-line do Walmart Brasil foi descontinuado. Na época, o site da rede somente operava no modelo marketplace. Segundo divulgado à imprensa, "a operação de e-commerce hoje representa uma parcela mínima das vendas totais da companhia".

Em agosto de 2019, com dificuldades na gestão do Walmart Brasil, o novo controlador da rede, a empresa de private equity Advent, estudava descartar o nome Walmart. A justificativa eram os royalties, de 0,7%, que o novo controlador teria de pagar ao grupo norte-americano pela utilização de suas marcas. Posteriormente, a empresa confirmou que o nome Walmart Brasil seria abandonado e substituído por BIG. Uma das justificativas, além dos royalties, era o vínculo afetivo com o consumidor do sul (com a marca BIG) e do Nordeste (com a marca Bompreço, posteriormente renomeada para BIG Bompreço). O grupo ainda continuou operando a marca Sam's Club, desta vez pagando royalties menores.

Aquisição pelo Carrefour
Em março de 2021, os donos do grupo, Advent e Walmart, informaram que chegaram a um acordo com o Carrefour Brasil para venda da operação por R$ 7,5 bilhões. A aquisição seria paga 70% em dinheiro, com o Carrefour adiantando R$ 900 milhões no ato da assinatura, e 30% em ações da rede francesa. Com isso, Walmart e Advent se tornariam sócios minoritários no Grupo Carrefour Brasil, com uma participação próxima de 5,6% no capital.  Em apresentação ao mercado, o Carrefour Brasil destacou que a compra do BIG era complementar a sua atuação (visto que não possuía operações relevantes no Sul e no Nordeste, focos do Grupo BIG) e acrescentaria novos formatos em sua plataforma, como as lojas Sam's Club, de clube de compras, e TodoDia, de soft discount. Além disso, a aquisição traria incrementos na rentabilidades das lojas, com um aumento estimado em 67% para os hipermercados e 69% para as lojas de atacarejo, além de contar com uma possível integração dos cartões Hipercard no ecossistema Carrefour, por meio do Banco CSF.

Em novembro do mesmo ano, o CADE (Conselho Administrativo de Defesa Econômica) determinou que a aquisição, envolvendo Carrefour e BIG, era "complexa" e pediu mais prazo para ser apreciada. Posteriormente, em janeiro de 2022, a Superintendência Geral do órgão recomendou a aprovação da transação, condicionada a venda de algumas unidade do varejo de autosserviço. Por fim, em maio de 2022, o órgão aprovou, com restrições, a compra do Grupo BIG pelo Carrefour Brasil. A decisão foi unânime e está condicionada a venda de determinadas lojas do BIG em cidades como Gravataí, Maceió, Olinda e Recife. O Carrefour, no entanto, já tinha propostas para venda das lojas alvo do desinvestimento do BIG naquela ocasião.

Em 7 de junho de 2022, as negociações foram finalizadas e o Grupo BIG passou a ser subsidiária integral do Grupo Carrefour Brasil.

Marcas
 BIG
 BIG Bompreço
 Super Bompreço
 Nacional
 TodoDia
 Maxxi Atacado
 Sam's Club

Empresas de comércio varejista do Brasil


The main ferry to Bute runs from Wemyss Bay to Rothesay. The service, operated by Caledonian MacBrayne, runs every 60 minutes all year round with some extra sailings during the summer months. The crossing takes approximately 35 minutes and bookings are not required. For further information and full timetables please visit www.calmac.co.uk. Rail connections are available from Glasgow Central and Paisley Gilmour Street.
Calmac also operates a smaller ferry service between Rhubodach (at the north end of Bute) and Colintraive, located on the Cowal peninsula. This is an excellent service for those wishing to take a more 'scenic' route through the Argyll countryside as the route goes past Loch Lomond and the famous 'Rest and Be Thankful'. Ferry crossings are every 30 minutes and the journey time is only 5 minutes.
Bute is easily reached by both Glasgow International (approx. 20 miles) and Glasgow Prestwick airports (approx. 30 miles). There is a direct rail service from Paisley Gilmour Street (which serves Glasgow International) to the ferry terminal at Wemyss Bay. Trains from Prestwick also run to Gilmour Street where you change trains for Wemyss Bay. Competitive car hire is also available at both airports. Wemyss Bay is served by buses from Glasgow, Greenock, Gourock and Largs.
Turn right out of the pier and drive in a northerly direction along the A844. In approx. 1.4 miles turn right onto shore road. Follow this road for approx. 0.7 miles. Ardyne House (No 35 Shore Road) is on your left opposite the ruins of the old steamer pier and is on the corner of Pier Lane.
Take the A866 to Port Bannatyne. Pass through the village and turn left onto Shore Road at the war memorial. Ardyne House (No 35 Shore Road) is 0.2 miles along on your right opposite the ruins of the old steamer pier and on the corner of Pier Lane.


Aside from the Volvo Penta engine panels the Wema Tank-level Indicator is the only remaining gauge from when I bought this boat in 2009 and it was probably there when she was launched in 2000. If it works don't fix it, right? But in fact it never worked very well; I just didn't realize it. The Poop Tank in particutlar was highly inconsistent, staying at "0" for unreasonable periods and sometimes jumping to "4/4" seemingly overnight, but didn't it make sense that even a specially protected sliding level sensor might fail after so many years in those conditions?
Yup, I started using a weighted line to occasionally measure fuel tank levels and felt fortunate that the boat's short, straight filler hoses make this easy and fairly accurate (I think). I also think that the tanks are rectangular, which would make a linear measurement equate well to volume, though I avoided assumptions that could get me in trouble. I intended, of course, to replace the Wema gauge or try something else, but didn't actually do anything until using the gauge became a matter of jiggling the on/off knob just so and then it died completely early in the trip north.
Also on the (very long) to-do list was testing some BEP CZone modules, including the Signal Interface which is purportedly capable of reading 240-30 Ohm tank senders like the Wemas. The hardware install could not have been easier. I just snipped the blade connectors off the tank and -12v wires that once went to the Wema gauge inserted them into the SI's removable terminal strip, added a NMEA 2000 drop to the boat's SimNet network and that was about it. In the photo I tried to show how the module is designed so that you can wire up the gasket and terminal strip away from the module and then put it all together in one easy move. Nice!
Then there was the CZone Configuration Tool, which is a Windows PC program that connects to the modules via a USB CAN Adapter. It seemed daunting at first but I've now managed to configure a few modules with it and I've hardly cracked the manual. I should do some reading though and I already see that there are impressive capabilities I haven't tried yet, but let's focus on the tank configuration screen above. What I love is shown in the bottom window where I am about to set a calibration point using "live data" from the sender. That means I've already been able to set tank percentages based on string measurements made at the same time and when I find a very patient fuel dock I'll be able to set or edit as many points as I want in terms of gallons.
CZone is thought of primarily as distributed power and digital switching system (as discussed after the Miami Show) and that stuff is done using proprietary NMEA 2000 PGNs. That means you can only make the switching work using a CZone display or a Simrad MFD (because Simrad and BEP have a partnership). I can confirm that as I also have a CZone Output module in operation (slickly), but the monitoring modules output standard PGNs as seen on the Raymarine i70 above, as well as on a Garmin GMI 10, a Maretron DSM, a Furuno TZT (fuel only) and elsewhere.
What doesn't carry across the system are the custom labels. In other words "Black Water" is a tank level category built into NMEA 2000 but "Poop Tank" is a custom label only supported so far by Simrad (though I believe that custom label concept is in N2K, just not widely utilized). At any rate, I'm delighted with what I've found so far, and there's much more yet to report. For instance, those temperatures seen on the NSS8 GoFree screen below are coming from a Maretron TMP 100, and that "Engrm" one, actually block temp, could proof itself invaluable. But consider this: when I do a major fuel fill in New Bedford tomorrow I should be able to see what's happening on an iPad. And whereas I also use fuel and waste tank levels to keep Gizmo trim — they're all outboard — I'll be able to use the same screen when pumping overboard (where possible). I don't think I'm going to replace the broken Wema gauge.
Next story Marine fuel prices, why so hard?
Previous story Garmin GMI 20 & GHC 20, back on top?
Though we haven't finished getting the tank sensors finished up, we've just completed some power distribution work with C-Zone as part of an electronics system overhaul on a Cherubini 48 Schooner. Based around a pair of NSS MFDs the owner can control Tricolor, Running lights, Windex, Steamer, and Foredeck lamps from either MFD (nav station or helm). I'm sorry I failed to take screen shots as the lighting functions also neatly show current draw on each. The C-Zone setup made cockpit control of the above deck lighting a far simpler installation versus setting up a conventional switch panel at the helm.
When we get the tanks done I'll try to send pics. I really think C-Zone will find it's way into more and more refits.
Thanks, Jonathan. Am I guessing correctly that you are a professional marine electronics installer? One issue with the CZone gear is that it is mainly marketed to pros, though several Panbo commenters have been able to buy equipment and get technical support for DIY projects.
It's been working quite well, including an alarm I've set up to warn of bulb failure (Maretron alarming is trail blazing and will get an entry).
It may sound crazy to have both Maretron and CZone on the same boat, and it's mainly because this boat is a test lab, but actually there's a lot of sensing and monitoring that's not currently duplicated. Goes to show how much is possible as NMEA 2000 bridges power and other systems to instrument and multi-function displays.
Been watching your progress up the coast. Good stops. Be sure to stop in at Margarets in New Bedford for scallops.
I think what your showing will work on the SallyW to monitor her new fuel tanks, replacing that funny little fourway switch to select sensors. I have the Garmin GMI 10 already. Willing to take some photos of that install for you. Maybe see you in Camden next week.
New Bedford/Fairhaven make a fantastic cruising stop, I think. Besides prowling the yards and fishermen docks, I've been to the museum and also visited Imtra and Edson (both impressive operations). Soon I hope to fill up on what may be the least expensive and freshest diesel in New England, then on to Onset and beyond.
I should be able to show you the CZone tank set up late next week, but only if the Gulf of Maine gets friendly.
Ahh, the Wema tank monitor.Finicky to set up and you never really knew what was going on!
Did any ever work out there in the real world?
Great story. How are you getting the battery info shown in the final picture.
Thanks, Steve. The house and engine battery info is coming from a CZone Meter module. It was again a very simple install as I already had a 50 milliamp shunt installed from the Link 1000 system I took off the boat last spring.
Calibration, however, is not so easy. It's not BEP's fault, the tools are there, but in my case I can't set a live point without having the inverter and computer on and I don't know what they draw. Plus, though I know the shunt was quite accurate with the Link, I've complicated things since with the solar panels. Wish I could drop a weighted string into my twin 8D's to measure its amp hour state!
At any rate, I've got it roughly calibrated and it is showing me trends at least. Plus I have some other battery monitors to mess with including an electronic Victron shunt and BMV 600 gauge that can be adapted to NMEA 2000.
I think the Boatersland prices are legit.
Their below MAP prices once you put them in the cart are pretty similar to what I paid for my modules. Most are slightly more expensive than what I paid (5% – 20%), but the Signal Interface is $20 less than I paid (but it's the cheapest module).
I think the SI is so cheap because it really is the simplest functionality of all the modules.
I think it's only a matter of time before more marine retailers have the gear. It seems that there is a steadily growing group of people using it in rewiring their boats, and finding out what is capable with it.
I was talking last week to a marine electrical business owner here who sells C-zone and has started installing C-Zone systems in rewiring projects. His comment was that the hardest thing was unlearning the way of thinking about traditional wiring looms and functionality so that you can take advantage of the many new features available. I totally agree with that.
Thanks, Paul! I realized that Gemeco offers all the CZone gear wholesale and that I had a copy of their (amazing) 500 page 2013 catalog. The Signal Interface module at $130 via Boatersland is a hair below wholesale so it is a bit of an anomaly, but then again the wholesale cost of a Maretron or Garmin analog-to-N2K adapter for just a single tank is significantly more. Not all the CZone stuff is so reasonable, as you note, but it's not bad.
Where can one obtain the "CZone Configuration Tool, which is a Windows PC program"?
When I purchased my C-zone components from the Singapore reseller/agent he registered me with BEP and I now get all the software updates emailed to me.
I tried to look at how I got the first software (I can't actually remember since it was 2010) – I assume it was on a disk when I bought the first component, but I couldn't find that. It may have been a link to a download that they sent me.
Anyway, they're good at sending me the updates.
I'm not sure how they'll do it via volume retailers like Boatersland. I assume it'll just come on a cd with the components and you'll register.
One other thing – you also need their (BEP's) USB interface to use the config tool. I have both Actisense's NGW-1 & Airmar's (that came with the PB200 & I believe is also Actisense's in an OEM package) N2K:USB and couldn't use either (a bit irritating). So don't forget to buy that if you need to configure a Czone system yourself.
Without the USB Can Adapter (pricey bit of kit) or programming, would your experience indicate that the CZone Meter Interface would provide PGNs to my NMEA 2000 network so I could at least monitor battery voltages on my displays?
I've never done anything without using the software programming and N2K:USB link because my system has about 20 C-zone modules and it was just easier to use the software.
However, I think it should be possible to do what you say.
Each Czone module has the full system configuration in it, so there's no "central processor". This means that if you can configure just one module, then if you have other modules in your network, they'll be automatically configured when you plug in the configured module. So, you need to figure out how to get 1 module configured.
– There are 3 possible ways to configure your network: 1) using the s/w & the USB:N2K gateway, 2) from a Display Interface, 3) by plugging a module with a configuration on it into a network that has not been configured.
– It also lists 16 proprietary PGNs, and then says that it can also pass approx 200 standard N2K pgns, but doesn't list them.
The proprietary PGNs listed are all network management and specific module configuration PGNs, not informational data PGNs, so that would lead me to surmise that almost all of the informative data is transmitted using standard N2K PGNs, including the Meter Interface data (but I don't know that for sure).
That should mean that if your display can read those standard PGNs, then if you can get your network configured, you should be able to see them. Be aware though that many of the displays can't display a lot of the standard PGNs, they seem to have quite limited PGN recognition, so check. The Maretron displays seem to have the biggest list by quite a wide margin.
So, how to get your module configured (the Meter Interface needs to be calibrated, so you need to be able to do that somehow).
1) The USB interface part number is 80-911-0044-00. I couldn't find that listed on the Boatersland site, but I'm sure they can get one. I paid about the same as a Switch Control Interface, which Boatersland has for $165, so I assume they'd charge close to that. I don't think that's too bad if you're going the Czone direction – it'd make the future a lot easier as you add modules.
2) Put a Czone control display into your network – this is probably a good idea if you're thinking of expanding it in future. There are 3 options: 1) The BEP Display Interface ($720 from Boatersland). The negative of the DI for configuration is that it's very tedious going through all the button presses – much easier through the PC s/w; 2) one of the cool touch screens that BEP offers (very expensive – i.e. $000's – we're using one at the nav station – it replaces the traditional Blue Sea breaker switch panel – but we've repalced our entire boat wiring with Czone so figured it was worth investing in), or 3) if you have a Simrad or B&G MFD you can control Czone ( I assume that this includes the configuration options but I don't know that for certain).
3) Find someone with a USB module and the software, and configure your module through them, then plug it into your network. Other non-configured modules will be automatically configured. (but the negative is that I don't think you can then reconfigure your network the same way if you want to change it). I would hope that a Czone installer near you would do that for a reasonable fee if you know the config parameters.
A bit long-winded, but hopefully is detailed enough so that the options are understandable.
It sounds like Ben is doing it one module at a time also, so Ben, how did you configure your module?
Thanks, Paul. I think you gave good guidance, but I can add more about how the Simrad MFDs and CZone work together.
First note that I too am using the USB CAN Adapter and Configuration software to set up and calibrate the test CZone modules. I'm afraid the Adapter is more expensive here than where you are, but it certainly works well and I suspect that any boater who wants to install CZone themselves should use this set up. I've used it quite often as I've fine tuned my tank and battery calibrations, for instance.
That might not be true if the Simrad displays could configure CZone, but they can not. However, the integration is nonetheless slick. When I first configured Gizmo's CZone system and then turned on the Simrad NSS and NSE they read the configuration and automatically set up nice switching and monitoring pages that come up first by default and are also available via a new CZone icon that appears in the Pages menu. The data is also available for custom instrument windows like the one shown at the bottom of the entry, and updated configurations are loaded at the next boot up.
Doug, I think you have to configure any CZone module. If nothing else, the Meter module has to be told what its inputs are and I suspect that any shunt, even CZone's own, may need calibration.
Thanks makes sense, Ben. Our B&G Zeus Touch is shipping to us right now, which is why I'm not au fait with the details of the integration. I read the manual and didn't see any mention of configuration, but mostly it just says "see the Czone documentation".
I absolutely agree with you that anyone seriously looking at a Czone installation should ante up for the USB interface – makes configuration and changes so much easier.
I've enhanced my configuration considerably since the first iteration as I learn more about the capabilities (or just want to try something out): I'm on version 6.3 of my config tinkering (I apply a software style numbering to keep track of all the changes properly).
Could I use my Actisense NGT-1 NMEA2000 gateway to access Czone modules?
Would I just need the software then?
Would Czone supply just software?
I have Simrad NSE's on board I can use as displays.
Apparently you can' use the Actisense gateway. I asked that when I bought my first Czone stuff 3 years ago. I don't know why (maybe Ben can supply the answer?).
At the time they said the only other USB interface that would work was the Simnet one. Maybe others also work now, but I wouldn't put money on it.
3 years ago BEP gave the software to me through a link in an email to a download page (I finally found that first email with the link – it was from Apr 2010). They didn't charge for that. So I assume that if you buy some Czone components today you'll still get the software link for free.
Thanks for all the info,Paul,much appreciated.
Sorry – I just saw my previous post. Typo in the first sentence – it should read "you can't use the Actisense gateway". Got the apostrophe but missed the "t". My apologies if it caused any confusion.
I have been perusing the Czone product line in the Bep catalog.
The AC systems are way overkill for the size of boats I work on.I wonder if Bep is planning to expand the product line to cover something like a 30amp 120volt single inlet with 15 amp branch circuits.
I came to the same conclusion about the AC switches – definitely not needed for our 46ft sailing yacht. So we have a mostly traditional AC system not using Czone.
They introduced the AC a few years after the DC, but I haven't seen any indication that they'll put out smaller systems. It may be that to get the Czone style benefits with AC they need to be that big.
Clearly aimed at large power boats with many AC circuits.
Hi Eric, I believe it's true that proprietary PGNs have the lowest priority and I think it's the right way to go. I certainly want developers to be able to create functionality faster than NMEA writes standards, but I also like the idea of incentives to make new ideas standard.
But I'm not seeing issues with proprietary PGN latency. Since early on my trip north I've had both of Gizmo's N2K networks bridged (with a simple BEP product) and so all the screens and sensors you see in recent entries are all on the same bus. That means something like six GPS receivers and two forms of digital switching, Maretron's and BEP's.
Various diagnostics indicate that the bus is only working at about 25% capacity and I've never seen a delay or mistake in switching. Not to say there haven't been issues, but it's oddball stuff like miscalculation of headings because devices apparently get confused by multiple variation sources. I look forward to the Mystic Valley smart bridge which will let me filter which PGNs cross over.
But I'm not sure that any company is using them yet, and there may be reluctance. N2K has supported ultra high priority engine commands almost since inception but that hasn't meant that the engine manufacturers jumped onboard.
I also recently learned that no BEP CZone product has yet received NMEA 2000 certification, even though BEP was one of the first to work on the power standards. I'm disappointed about this and hope they fix it, but I also think that seeing so many builders go with CZone — a wicked big decision — should trouble NMEA in terms of how highly certification is respected.
Sorry to post to an old thread, but could you tell me if it is possible to configure the TS1 ultrasonic tank sensors through the czone module using the USB configuration tool, or would you still have to use the TS1-PK programmer for the sensor?
In fact, I'm not sure they've been updated since 2010 and I don't see them available at many sources.
At any rate, they were designed to work with traditional U.S. or European ohm sensing tank level displays, so they should work with the CZone Signal Interface just like my old Wema senders did.
You'd still need a Maretron gateway (or display) to calibrate the senders, but you wouldn't need a Signal Interface to convert their output into NMEA 2000 that could be shown on many displays.
OK thanks for the helpful info. I'll drop Budget Marine a line with the question. I picked up three TS1 sensors on closeout and Boat Electric was going to program them before shipment but can't find their programmer so I'm trying to find a way around it without buying a TS1-PK. On another note, which display would you recommend for the czone at the Nav station? Initially I would just have my tanks and AC/DC monitor info to display.
Sorry, it's still not clear what you're doing. The TS1 sensors are not CZone and they won't output NMEA 2000 without a CZone Signal Interface or similar.
Yes, sorry I wasn't clear. I was planning to connect the TS1 sensors to a czone Signal Interface (SI) module as you mentioned. Then hopefully I could program their tank configuration parameters for non-linearity using the czone USB interface and configuration tool. My other question concerned what display to hang on the N2K bus in order to read the output from the czone SI and MI interface modules. I am not too keen on $700 for the small czone display and I'm wondering if a Triton or Garmin or similar might be a better choice for the money.
Right, if you do the configuration on a PC you do not need the CZone display. Almost any N2K display will probably show the tank and battery levels but Simrad or Garmin are probably better as at least the MFDs are designed to interface with the whole CZone system. I can't remember if the Triton showed the custom names I created for my tanks, but that's icing on the cake.
OK, thanks. I'll check out the Simrad too.
We have a full C-zone system: both control & monitoring systems.
We have one of their touch screen interfaces at the nav station. Really expensive but very cool.
In the cockpit we control and monitor the entire system using our B&G Zeus-touch MFD. It gives us full control and monitoring capabilities.
We can also view most system data using our Maretron N2K displays (or I assume most other N2K displays these days).
So, your options for viewing data are many. However, if you're planning on adding some system control capability, then you'd be best going for one of the control and monitor options now: B&G, Simrad, Garmin MFD, or BEP's own touch screen.
It'd be nice if they had a PC based live monitoring & control interface, but they say that's not a current high priority for them.
Also, one thing I'd recommend on your installation is the following that we've done. Because our entire boat electrics is controlled by C-zone (through an entire rewire project), we want the C-zone system to always function. In addition, our instrument network is a fairly significant N2K system. So, we've put in 2 separate N2K networks: one for the instruments, the other dedicated to C-zone. We've then bridged them using a network bridge (BEP's in our case). This enables data to be shared, but if one network goes down we don't lose both. If you're thinking about an extended C-zone system over time, you might want to start off with separate networks now.
Thanks for the very helpful post. I currently have a Garmin 4208 at the helm. Will it be able to handle the control side of things you spoke of? For the Nav station I'm trying to decide between the Garmin GMI 20, Simrad IS 40, or the B&G T41. They all seem to be priced about the same. Do you think one of them has advantages over the others for this application?
Do you turn your Nav network off when at anchor or do both networks stay on essentially all the time?
Sorry, I don't know anything about the Garmin MFDs which are compatible with C-zone: I think Ben probably has some knowledge. I imagine it's only their latest releases since it's only been this year when that's happened.
I know that the Simrad/B&G interface is pretty slick and gives access to all the C-zone functionality. But Simrad first did that integration a few years ago so they've had time to get it right.
Also, I don't have any comments on the best instrument display for your nav station. We don't really use our instruments to report on C-zone much because we have all the other displays I mentioned.
I would say though that I don't believe any of the nav instrument displays both data reporting AND C-zone control functions. I believe that they can only report N2K standard PGNs which are generated on the C-zone network: not anything else like proprietary C-zone info nor send commands to C-zone. For those I believe that you need either one of those MFDs, or a C-zone specific control display (Ben, do you concur with that?).
I don't think using c-zone just for reporting of tank depth and other things is the best use of it: as Ben pointed out earlier there are other options for reporting those. To me the strength of C-zone is the switching and input triggering functions.
Given that, I'd think you'd really want a nav station display which can actually control the c-zone rather than just report on it. If you don't want to put in a BEP controller, you could always look for one of the lower end garmin or simrad mfd's which support c-zone.
Yes, we turn the instrument network off at anchor mostly, but of course leave the c-zone network on so that we can control our switches. That's another benefit of having the dual n2k networks.
I hope this helps, and that Ben knows more about the Garmin products and c-zone.
FYI, except for some sail specific functions, and the plastic bezel bearing the names, Simrad's IS40 and the B&G T41 are identical pieces of hardware.
Paul, I think your CZone advice is very good.
In fact, the only Garmins that seem to have CZone switching so far is the 8xxx Series, and I doubt it will get added to a series as old as the 4xxx (though nice to see that they got support for integration with the Bluechart app over WiFi).
As for which instrument display is best for showing the tank and battery info coming from your CZone modules, I'm not sure there's much difference. The Garmin GMI20 might be your best bet, though, as you can use your 4208 to keep its software up to date.
Paul, when you mention there may be a simpler way to handle my monitoring objectives, could I pick your brain along with the others on this subject a bit?
I understand Ben's recommendation toward the Maretron sensors and direct connection to the N2K bus. However, I'm limited by the fact that I have already purchased BEP TS1 sensors on closeout that I got for less than half the cost of the Maretrons. So I guess I'm constrained by my money saving efforts, lol. What would you recommend as best option from this point?
In the BEP world I could use the DCSM or the Czone MI/SI approach since I want to monitor batteries as well. DCSM is cheaper overall because of the integral display, but it doesn't put any of the information on the N2K bus and that kills it as an option in my mind. The TS1 sensors support multiple output configurations so they would work with other manufacturer's monitoring equipment. However, so far I haven't found a better system for the money to take the outputs of the TS1 ultrasonic sensors and interface them to the N2K bus than Czone. I may well be missing something better so please give me any thoughts on this you have?
BTW, on the question about programming the TS1 sensors using the BEP Configuration Tool through the SI unit, BEP says it can't be done. The sensors must be programmed with the TS1-PK adapter. So now I either have to find someone with an adapter to load my tank parameters into the senders, or buy the adapter myself.
I think that is a matter of sematics, at least to a certain degree. The resistance in your TS1 senders is going to vary with tank level just like the resistance in my Wema senders, and as I wrote in the entry CZone lets you easily and infinitely configure the gallon and tank percentage values those Ohm readings will display as.
But my Wema senders were already installed, and were designed for the tank depths they're in. I have no experience with ultrasonic tank senders but I suspect that your TS1's need to be told what full and empty look like, and there may be other calibrations of the sender itself.
Yes, you're right. The programming I was speaking of has to do with the on-board intelligence of the sensor itself. The TS1-PK is used to load the tank parameters into the sensor for tank depth, distance to the full mark and the non-linearity of the tank shape.
When I said that there might be better ways of handling monitoring I was really thinking that installing a C-zone system to just monitor a few tank senders seems like overkill and really isn't using the power of C-zone to my way of thinking. But, then again, if you're thinking that in the future you'd like to develop the C-zone network more, why not start with these tank gauges: especially if you have the C-zone components already.
I don't know anything about the TS1 sender, but I had a quick look at BEP's website about it, and I think to Ben's point you can probably make it work directly with a C-zone Signal Input (SI) module without reprogramming the sender itself. It certainly looks like the sender's 3 wires correspond to the inputs needed for a C-zone sender setup.
If I've read BEP's info correctly, the sender is shipped preset to a 2 metre tank depth, and various other "standard" parameters (probably 0-5V output – although I'm not sure of that). So, each sender will output values that C-zone should be able to read.
The C-zone tank sender input software setting is very flexible: basically you can put in as many lines as you want of 3 pieces of info: sender output value, % of capacity that relates to, volume of fluid that relates to.
So, if you can manually measure the output of the sender and establish what mode it is in (0-5V, 10 – 180 ohm, or 240 – 33 ohms), then whilst you are filling your tanks you can manually measure the sender value at various tank fill levels (to whatever level of accuracy you want: every 10% of tank volume, or every 25%, or even every 1% if you can be bothered). You can then write that into the C-zone calibration table for the sender, and you shouldn't have to worry about recalibrating the internal sender values. The beauty of that is that you also don't have to worry about the shape of the tank, irregularities, etc.
The negative will be that if you don't have a tank exactly like the "standard" tank pre-programmed into the sender (which you won't), then you won't get the ultimate full scale accuracy you would if you could re-programme the actual sender. So, for e.g., if your tank is 1m deep (instead of the 2m pre-programmed), and the sender is on the 0 – 5V setting, then the range of values you get will only be 2.5V, instead of 5V. This might affect accuracy a little, but I imagine it'd still be good enough to use.
In my view, you might as well try that first and see if you can get it working. If not, then look at alternatives.
Of the alternatives, probably the cheapest would be to buy BEP's TS1-PK (looks like it's about $100 at discount web stores), and then you can fully programme each TS1 and then interface to a C-zone SI module.
I hope this helps – no exact solution, but some things for you to try.
On a slightly different tack: here's a question for those of you who have purchased C-zone modules. When you bought it, were you then given the config software and all the manuals and files? Did you get them with the module, or did you have to register the modules with BEP on the internet first?
I am registered with BEP, and get all the files via email (drop box) when they're updated. I can't remember how I got registered (it was 3 years ago now).
I was just wondering how the process is working now.
Thanks for the explanation. I can better see your and Ben's point now. It's nice the Czone programming is versatile enough to come at the issue from either direction.
BEP referred me a technical service specialist in Wisconsin that has offered to program my sensors. So I'm planning on going that route, and will probably buy a Simrad NSS7 to serve as the display/controller. They have a $200 rebate going on now.
I think that's a good way to go.
Thanks for all your help on these questions Gentlemen. You've helped me get a much better handle on it.
I will describe what I have found with IS40 and CZONE.
I own IS40 and CZONE/BEP meter and signal interface.
I've tried to get info from meter interface on IS40 and all what I can see is voltage and current for house battery. I don't know how to add other info from CZONE as % of charge. Is it possible?
Also, if I want to see voltage of engine battery, it is complicated through IS40 menu(advanced setup) to change source device for battery screen. I haven't found the way to add second battery on IS40. It looks like tree of NMEA devices is a static list, not shared over NMEA (exactly not with CZONE devices).
I didn't get custom name showing on IS40 too.
I'm just wondering if I monitor two fuel tanks and two water tanks later, I won't be able to see them both on one IS40, without complicated switching through menu. Installing another IS40 is not a way. Is it another display device where I can see it?
Do you know when I get NSS7 in network if alarm messages from NSS7 show up on IS40 and list of devices on IS40 will update over NMEA?
I don't think so or I haven't found any information about it.
I haven't tried the IS40 but I think it's quite similar to the B&G Triton, which definitely can not display all the data that your CZone Meter and Signal Interface can generate. The list you see when you select a data field is not a static list but it only includes the NMEA 2000 messages (called PGN's) that the IS40 has been programed to display. I don't think that any N2K device knows them all.
At any rate, I can't get Fresh Water or Waste tank display on my Triton either, though the Raymarine i70 can display those values (as illustrated above). MFD's generally know more PGN's than instruments but the good news is that they can all be taught more with software updates.
The NSS7 also shows all the live N2K network data it understands, and it understands much more than the IS40, including CZone field labels like "Poop Tank" (see above).
Does anyone have a copy of the CZone configuration software? After the Marinco/Mastervolt takeover it seems like all support is scattered all over the place.
I got a ex dealer demo set 🙂 I would like to configure.
Martin – I know the latest IS40 software update (2.9) have some CZone related updates in it. I don't know which version you have – but once I get mine setup (get the Di Software…) – I can test with my IS40 displays.
Earlier in this thread I was trying to get a couple of BEP TS1 tank monitors programmed that I purchased on closeout. Well, the sensors never shipped so I'm back to your recommendation to use Maretron TLM100's. I would also like to use their WSO100 for wind. Would I be able to calibrate tank shape and wind offset using a Vesper XB8000 to interface the network from my laptop? If so, is there free software with the sensors that will accomplish this level of configuration?
Thanks for the quick reply. Do you know of any dealers that would be willing to program the tank sensors prior to shipping? I have the parameters figured out for my tanks and hate to buy an interface just for one time programming. Or maybe there is some other way of accomplishing this more efficiently that comes to your mind?
I would underscore the caveat that we can only program to the tank info provided w/o seeing the tanks firsthand. We are big fans of block filling for accurate cals but do realize that is not always feasible.
Thanks for the reply. I will shoot you an email. I have done the block fill process for both my tanks so I have the information in that format.
Do you find that users will tweek their settings after the installation has been online for a while, or does a block fill analysis tend to work without further refinement?
I was looking into getting a COI, mind you i wasn't looking very hard, I only found aus and nz online stores but I wanted to get it from Asia because I am in holiday in Hong Kong. A friend of mine in the industry told me of a website called http://www.czoneonline.com It seems quite new, it has all software/firmware updates.
Czoneonline looks like a great resource for anyone using CZone. Latest configuration software, well written "how to" tips, they're all there. It also seems possible for anyone, including DIY folks, to purchase CZone gear there; they ship international and use PayPal.


text:
JM Family Sites
Buy A Toyota
JM&A Group
World Omni Financial Corp.
JM Lexus
Southeast Toyota Finance
Founder Jim Moran
Business Accomplishments
Southeast Toyota Distributors
Notice to Job Applicants
Nine Things You Should Know
Total Rewards Philosophy
Meet Our Associates
Graduates of the Youth Automotive Training Center Celebrate During 35th Commencement Ceremony
Twenty-seven at-risk youth who have overcome great adversity recently became the 35th class to complete a transformative, nine-month program created by automotive legend and JM Family Enterprises founder Jim Moran. Members of the Youth Automotive Training Center's (YATC) Class of 2014, ages 17 to 22, celebrated during a graduation ceremony with family and friends on May 22.
Jim Moran established YATC in 1984 with the mission to train and educate troubled young men and women in basic automotive repair, academic remediation, job readiness and life management skills. The center's goal is to prepare the students to become self-sufficient and productive citizens.
This year's graduates join more than 600 fellow alumni whose lives have been turned around by this innovative program, which is celebrating its 30th Anniversary. Former Miami Dolphins defensive end and YATC supporter Jeff Cross helped present certificates of completion to the graduates with Executive Director Terry Routley.
"YATC has a significant impact on young people and their families, and this program has positively altered the course of so many of their lives," said Routley. "These students know that when they graduate tonight they are not losing us as family. We will continue to stand behind them and provide support when they need us."
Students are referred to YATC in a variety of ways, including through Florida's Department of Juvenile Justice and Department of Children and Families, as well as YATC graduates, local clergy and by word of mouth. Many of these young people have experienced poverty, crime, abuse and addiction even before reaching their teen years.
Sixteen scholarships for continuing education were awarded at the graduation ceremony and five students received special recognition for their exceptional dedication to the program. Additionally, six of this year's graduates earned their GED.
Timothy Butler, 22, received the Bruce Rossmeyer Memorial Kick Start Scholarship Award. Established in 2009 by Jan Moran in memory of Bruce Rossmeyer, this recognition includes a full tuition scholarship to attend a technical/vocational school. Rossmeyer, founder of Bruce Rossmeyer's Daytona Harley-Davidson and Daytona Toyota, was a devoted friend and generous supporter of YATC. In honor of her late husband, Sandy Rossmeyer, along with Jan Moran, presented Butler with the award.
"I was searching for help and discovered a place with good people to help me get on the right road," Butler said. "If I hadn't found YATC, I am not sure what my life would look like right now, but I definitely wouldn't have this much hope for my future."
YATC guest speaker Ray Daley, a member of YATC's Board of Directors, said something that resonated with Butler, "…make yourself a first priority." Those words motivated him to work hard, successfully earn his GED and continue his education. Butler hopes to become a master underwater welder and business owner.
Other stand-out award recipients include:
Jarad Boykins, 21, was presented with the Jump Start Award for excellence in automotive knowledge and repairs.
Brian Garvey, 18, was honored with the Turnabout Award for making significant changes in all areas of his life.
Roel Edwards and Dondrea Grant, both 20, received the Outstanding Attendance Award for demonstrating a commitment to completing the program.
The Jim Moran Award is presented each year to a community partner who has dedicated his/her time to supporting YATC's mission. Longtime advocate and Advisory Board member Dr. William Penzer received this year's distinction. With more than 30 years of experience as a psychologist, therapist and life coach, Dr. Penzer is an annual guest speaker who provides YATC students with life management skills training, including counseling on careers, substance abuse and healthcare. Three psychologists from his Plantation-based practice offer their services and expertise by working one-on-one with the students throughout the school year.
For more information about the Youth Automotive Training Center, please visit www.yatc.org or call 954-428-0909. YATC is located at 399 S.W. Martin Luther King Jr. Ave., Deerfield Beach, Fla.
To download photos, click here.
EXPLORE OUR FAMILY OF COMPANIES
© 2020 JM Family Enterprises, Inc.
Stay Connected with JM Family:

redpajama_set_name: RedPajamaCommonCrawl


I have found a file with a selected (sampling) listing from the Putnam County Recorders Office. The Listing follows below, I have placed it in a Table to better organize the Listing. We would love to add more if anyone can or would help.


text:
package quarks.test.connectors.jdbc;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assume.assumeTrue;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

import javax.sql.DataSource;

import org.junit.Test;

import quarks.connectors.jdbc.JdbcStreams;
import quarks.test.connectors.common.ConnectorTestBase;
import quarks.topology.TSink;
import quarks.topology.TStream;
import quarks.topology.Topology;
import quarks.topology.plumbing.PlumbingStreams;

/**
 * JdbcStreams connector tests.
 *

 * The tests use Apache Embedded Derby as the backing dbms.
 * The Oracle JDK includes Derby in $JAVA_HOME/db.
 * Manually install Derby for other JDKs if required.
 * Arrange for the classpath to be configured by one of:
 *

 *
set the DERBY_HOME environment variable.  build.xml adds
 *     $DERBY_HOME/lib/derby.jar to the classpath when running the tests.

 *
manually add derby.jar to the classpath

 *

 * The tests are "skipped" if the dbms's jdbc driver can't be found.
 */
public class JdbcStreamsTest  extends ConnectorTestBase {

    private static final int SEC_TIMEOUT = 10;
    private final static String DB_NAME = "JdbcStreamsTestDb";
    private final static String USERNAME = System.getProperty("user.name");
    private final static String PW = "none";
    private static final List<Person> personList = new ArrayList<>();
    static {
        personList.add(new Person(1, "John", "Doe", "male", 35));
        personList.add(new Person(2, "Jane", "Doe", "female", 29));
        personList.add(new Person(3, "Billy", "McDoe", "male", 3));
    }
    private static final List<PersonId> personIdList = new ArrayList<>();
    static {
        for(Person p : personList) {
            personIdList.add(new PersonId(p.id));
        }
    }

    private static class Person {
        int id;
        String firstName;
        String lastName;
        String gender;
        int age;
        Person(int id, String first, String last, String gender, int age) {
            this.id = id;
            this.firstName = first;
            this.lastName = last;
            this.gender = gender;
            this.age = age;
        }
        public String toString() {
            return String.format("id=%d first=%s last=%s gender=%s age=%d",
                    id, firstName, lastName, gender, age);
        }
    }

    private static class PersonId {
        int id;
        PersonId(int id) {
            this.id = id;
        }
        public String toString() {
            return String.format("id=%d", id);
        }
    }

    DataSource getDerbyEmbeddedDataSource(String database) throws Exception
    {
        // Avoid a compile-time dependency to the jdbc driver.
        // At runtime, require that the classpath can find it.
        // e.g., build.xml adds $DERBY_HOME/lib/derby.jar to the test classpath

        String DERBY_DATA_SOURCE = "org.apache.derby.jdbc.EmbeddedDataSource";

        Class<?> nsDataSource = null;
        try {
            nsDataSource = Class.forName(DERBY_DATA_SOURCE);
        }
        catch (ClassNotFoundException e) {
            String msg = "Fix the test classpath. ";
            if (System.getenv("DERBY_HOME") == null) {
                msg += "DERBY_HOME not set. ";
            }
            msg += "Class not found: "+e.getLocalizedMessage();
            System.err.println(msg);
            assumeTrue(false);
        }
        DataSource ds = (DataSource) nsDataSource.newInstance();

        @SuppressWarnings("rawtypes")
        Class[] methodParams = new Class[] {String.class};
        Method dbname = nsDataSource.getMethod("setDatabaseName", methodParams);
        Object[] args = new Object[] {database};
        dbname.invoke(ds, args);

        // create the db if necessary
        Method create = nsDataSource.getMethod("setCreateDatabase", methodParams);
        args = new Object[] {"create"};
        create.invoke(ds, args);

        return ds;
    }

    private DataSource getDataSource(String logicalDbName) throws Exception {
        return getDerbyEmbeddedDataSource(logicalDbName);
    }

    private Connection connect(DataSource ds) throws Exception {
        return ds.getConnection(USERNAME, PW);
    }

    private void createPersonsTable() throws Exception {
        DataSource ds = getDataSource(DB_NAME);
        try(Connection cn = connect(ds)) {
            Statement stmt = cn.createStatement();
            try {
                stmt.execute("CREATE TABLE persons "
                        + "("
                        + "id INTEGER NOT NULL,"
                        + "firstname VARCHAR(40) NOT NULL,"
                        + "lastname VARCHAR(40) NOT NULL,"
                        + "gender VARCHAR(6),"
                        + "age INTEGER,"
                        + "PRIMARY KEY (id)"
                        + ")"
                        );
            }
            catch (SQLException e) {
                if (e.getLocalizedMessage().contains("already exists"))
                    return;
                else
                    throw e;
            }
        }
    }

    private void truncatePersonsTable() throws Exception {
        createPersonsTable();
        DataSource ds = getDataSource(DB_NAME);
        try(Connection cn = connect(ds)) {
            Statement stmt = cn.createStatement();
            stmt.executeUpdate("DELETE FROM persons");
        }
    }

    private void populatePersonsTable() throws Exception {
        truncatePersonsTable();
        DataSource ds = getDataSource(DB_NAME);
        try(Connection cn = connect(ds)) {
            Statement stmt = cn.createStatement();
            for(Person p : personList) {
                stmt.execute(String.format(
                        "INSERT INTO persons VALUES(%d,'%s','%s','%s',%d)",
                            p.id, p.firstName, p.lastName, p.gender, p.age));
            }
        }
    }

    private TStream<Person> readPersonsTable(Topology t, JdbcStreams db, List<PersonId> personIdList, int delayMsec) {
        // Create a stream of Person from a stream of ids
        TStream<PersonId> personIds = t.collection(personIdList);
        if (delayMsec!=0) {
            personIds =  PlumbingStreams.blockingOneShotDelay(personIds,
                    delayMsec, TimeUnit.MILLISECONDS);
        }
        TStream<Person> rcvdPerson = db.executeStatement(personIds,
                () -> "SELECT id, firstname, lastname, gender, age"
                        + " FROM persons WHERE id = ?",
                (tuple,stmt) -> stmt.setInt(1, tuple.id),
                (tuple,resultSet,exc,stream) -> {
                    resultSet.next();
                    int id = resultSet.getInt("id");
                    String firstName = resultSet.getString("firstname");
                    String lastName = resultSet.getString("lastname");
                    String gender = resultSet.getString("gender");
                    int age = resultSet.getInt("age");
                    stream.accept(new Person(id, firstName, lastName, gender, age));
                    }
                );
        return rcvdPerson;
    }

    private static java.util.function.Predicate<Person> newOddIdPredicate() {
        return (person) -> person.id % 2 != 0;
    }

    private List<String> expectedPersons(java.util.function.Predicate<Person> predicate, List<Person> persons) {
        return persons.stream()
                .filter(predicate)
                .map(person -> person.toString())
                .collect(Collectors.toList());
    }

    @Test
    public void testBasicRead() throws Exception {
        Topology t = newTopology("testBasicRead");

        populatePersonsTable();
        List<String> expected = expectedPersons(person->true, personList);

        JdbcStreams db = new JdbcStreams(t,
                () -> getDataSource(DB_NAME),
                dataSource -> connect(dataSource));

        // Create a stream of Person from a stream of ids
        TStream<Person> rcvdPerson = readPersonsTable(t, db, personIdList, 0/*msec*/);
        TStream<String> rcvd = rcvdPerson.map(person -> person.toString());

        rcvd.sink(tuple -> System.out.println(
                String.format("%s rcvd: %s", t.getName(), tuple)));
        completeAndValidate("", t, rcvd, SEC_TIMEOUT, expected.toArray(new String[0]));
    }

    @Test
    public void testBasicRead2() throws Exception {
        Topology t = newTopology("testBasicRead2");
        // same as testBasic but use the explicit PreparedStatement forms
        // of executeStatement().

        populatePersonsTable();
        List<String> expected = expectedPersons(person->true, personList);

        JdbcStreams db = new JdbcStreams(t,
                () -> getDataSource(DB_NAME),
                dataSource -> connect(dataSource));

        // Create a stream of Person from a stream of ids
        // Delay so this runs after populating the db above
        TStream<PersonId> personIds =  PlumbingStreams.blockingOneShotDelay(
                t.collection(personIdList), 3, TimeUnit.SECONDS);
        TStream<Person> rcvdPerson = db.executeStatement(personIds,
                (cn) -> cn.prepareStatement("SELECT id, firstname, lastname, gender, age"
                        + " FROM persons WHERE id = ?"),
                (tuple,stmt) -> stmt.setInt(1, tuple.id),
                (tuple,resultSet,exc,stream) -> {
                    resultSet.next();
                    int id = resultSet.getInt("id");
                    String firstName = resultSet.getString("firstname");
                    String lastName = resultSet.getString("lastname");
                    String gender = resultSet.getString("gender");
                    int age = resultSet.getInt("age");
                    stream.accept(new Person(id, firstName, lastName, gender, age));
                    }
                );
        TStream<String> rcvd = rcvdPerson.map(person -> person.toString());

        rcvd.sink(tuple -> System.out.println(
                String.format("%s rcvd: %s", t.getName(), tuple)));
        completeAndValidate("", t, rcvd, SEC_TIMEOUT, expected.toArray(new String[0]));
    }

    @Test
    public void testBasicWrite() throws Exception {
        Topology t = newTopology("testBasicWrite");

        truncatePersonsTable();
        List<String> expected = expectedPersons(person->true, personList);

        JdbcStreams db = new JdbcStreams(t,
                () -> getDataSource(DB_NAME),
                dataSource -> connect(dataSource));

        // Add stream of Person to the db
        TStream<Person> s = t.collection(personList);
        TSink<Person> sink = db.executeStatement(s,
                () -> "INSERT INTO persons VALUES(?,?,?,?,?)",
                (tuple,stmt) -> {
                    stmt.setInt(1, tuple.id);
                    stmt.setString(2, tuple.firstName);
                    stmt.setString(3, tuple.lastName);
                    stmt.setString(4, tuple.gender);
                    stmt.setInt(5, tuple.age);
                    }
                );
        assertNotNull(sink);

        // Use the same code as testBasicRead to verify the write worked.
        TStream<Person> rcvdPerson = readPersonsTable(t, db, personIdList, 3000/*msec*/);
        TStream<String> rcvd = rcvdPerson.map(person -> person.toString());

        rcvd.sink(tuple -> System.out.println(
                String.format("%s rcvd: %s", t.getName(), tuple)));
        completeAndValidate("", t, rcvd, SEC_TIMEOUT, expected.toArray(new String[0]));
    }

    @Test
    public void testBasicWrite2() throws Exception {
        Topology t = newTopology("testBasicWrite2");
        // same as testBasic but use the explicit PreparedStatement forms
        // of executeStatement().

        truncatePersonsTable();
        List<String> expected = expectedPersons(person->true, personList);

        JdbcStreams db = new JdbcStreams(t,
                () -> getDataSource(DB_NAME),
                dataSource -> connect(dataSource));

        // Add stream of Person to the db
        TStream<Person> s = t.collection(personList);
        TSink<Person> sink = db.executeStatement(s,
                (cn) -> cn.prepareStatement("INSERT into PERSONS values(?,?,?,?,?)"),
                (tuple,stmt) -> {
                    stmt.setInt(1, tuple.id);
                    stmt.setString(2, tuple.firstName);
                    stmt.setString(3, tuple.lastName);
                    stmt.setString(4, tuple.gender);
                    stmt.setInt(5, tuple.age);
                    }
                );

        assertNotNull(sink);

        // Use the same code as testBasicRead to verify the write worked.
        TStream<Person> rcvdPerson = readPersonsTable(t, db, personIdList, 3000/*msec*/);
        TStream<String> rcvd = rcvdPerson.map(person -> person.toString());

        rcvd.sink(tuple -> System.out.println(
                String.format("%s rcvd: %s", t.getName(), tuple)));
        completeAndValidate("", t, rcvd, SEC_TIMEOUT, expected.toArray(new String[0]));
    }

    @Test
    public void testBadConnectFn() throws Exception {
        Topology t = newTopology("testBadConnectFn");
        // connFn is only called for initial connect or reconnect
        // following certain failures.
        // Hence, to exercise transient connFn failures, we need to start
        // off with a failure.

        // TODO for transient connection failure cases, simulate a failure
        // as part of preparedStatement.execute() failing (e.g., force cn-close
        // right before it?), so that we can verify the conn is closed and
        // then reconnected

        populatePersonsTable();
        List<String> expected = expectedPersons(p->true, personList.subList(1, personList.size()));
        int expectedExcCnt = personList.size() - expected.size();

        AtomicInteger connFnCnt = new AtomicInteger();
        JdbcStreams db = new JdbcStreams(t,
                () -> getDataSource(DB_NAME),
                dataSource -> {
                    if (connFnCnt.incrementAndGet() == 1)
                        throw new SQLException("FAKE-CONNECT-FN-FAILURE");
                    else
                        return connect(dataSource);
                    });

        // Create a stream of Person from a stream of ids
        AtomicInteger executionExcCnt = new AtomicInteger();
        TStream<PersonId> personIds = t.collection(personIdList);
        TStream<Person> rcvdPerson = db.executeStatement(personIds,
                () -> "SELECT id, firstname, lastname, gender, age"
                        + " FROM persons WHERE id = ?",
                (tuple,stmt) -> stmt.setInt(1, tuple.id),
                (tuple,resultSet,exc,stream) -> {
                    System.out.println(t.getName()+" resultHandler called tuple="+tuple+" exc="+exc);
                    if (exc!=null) {
                        executionExcCnt.incrementAndGet();
                        return;
                    }
                    resultSet.next();
                    int id = resultSet.getInt("id");
                    String firstName = resultSet.getString("firstname");
                    String lastName = resultSet.getString("lastname");
                    String gender = resultSet.getString("gender");
                    int age = resultSet.getInt("age");
                    stream.accept(new Person(id, firstName, lastName, gender, age));
                    }
                );
        TStream<String> rcvd = rcvdPerson.map(person -> person.toString());

        rcvd.sink(tuple -> System.out.println(
                String.format("%s rcvd: %s", t.getName(), tuple)));
        completeAndValidate("", t, rcvd, SEC_TIMEOUT, expected.toArray(new String[0]));
        assertEquals("executionExcCnt", expectedExcCnt, executionExcCnt.get());
    }

    @Test
    public void testBadSQL() throws Exception {
        Topology t = newTopology("testBadSQL");
        // the statement is nominally "retrieved" only once, not per-tuple.
        // hence, there's not much sense in trying to simulate it
        // getting called unsuccessfully, then successfully, etc.
        // however, verify the result handler gets called appropriately.

        populatePersonsTable();
        List<String> expected = Collections.emptyList();
        int expectedExcCnt = personList.size() - expected.size();

        JdbcStreams db = new JdbcStreams(t,
                () -> getDataSource(DB_NAME),
                dataSource -> connect(dataSource));

        // Create a stream of Person from a stream of ids
        AtomicInteger executionExcCnt = new AtomicInteger();
        TStream<PersonId> personIds = t.collection(personIdList);
        TStream<Person> rcvdPerson = db.executeStatement(personIds,
                () -> "SELECT id, firstname, lastname, gender, age"
                        + " FROM persons WHERE BOGUS_XYZZY id = ?",
                (tuple,stmt) -> stmt.setInt(1, tuple.id),
                (tuple,resultSet,exc,stream) -> {
                    System.out.println(t.getName()+" resultHandler called tuple="+tuple+" exc="+exc);
                    if (exc!=null) {
                        executionExcCnt.incrementAndGet();
                        return;
                    }
                    resultSet.next();
                    int id = resultSet.getInt("id");
                    String firstName = resultSet.getString("firstname");
                    String lastName = resultSet.getString("lastname");
                    String gender = resultSet.getString("gender");
                    int age = resultSet.getInt("age");
                    stream.accept(new Person(id, firstName, lastName, gender, age));
                    }
                );
        TStream<String> rcvd = rcvdPerson.map(person -> person.toString());

        rcvd.sink(tuple -> System.out.println(
                String.format("%s rcvd: %s", t.getName(), tuple)));
        completeAndValidate("", t, rcvd, SEC_TIMEOUT, expected.toArray(new String[0]));
        assertEquals("executionExcCnt", expectedExcCnt, executionExcCnt.get());
    }

    @Test
    public void testBadSetParams() throws Exception {
        Topology t = newTopology("testBadSetParams");
        // exercise and validate  behavior with transient parameter setter failures

        populatePersonsTable();
        List<String> expected = expectedPersons(newOddIdPredicate(), personList);
        int expectedExcCnt = personList.size() - expected.size();

        JdbcStreams db = new JdbcStreams(t,
                () -> getDataSource(DB_NAME),
                dataSource -> connect(dataSource));

        // Create a stream of Person from a stream of ids
        AtomicInteger executionExcCnt = new AtomicInteger();
        TStream<PersonId> personIds = t.collection(personIdList);
        TStream<Person> rcvdPerson = db.executeStatement(personIds,
                () -> "SELECT id, firstname, lastname, gender, age"
                        + " FROM persons WHERE id = ?",
                (tuple,stmt) -> { if (tuple.id % 2 != 0)
                                    stmt.setInt(1, tuple.id);
                                  else
                                    stmt.setString(1, "THIS-IS-BOGUS"); },
                (tuple,resultSet,exc,stream) -> {
                    System.out.println(t.getName()+" resultHandler called tuple="+tuple+" exc="+exc);
                    if (exc!=null) {
                        executionExcCnt.incrementAndGet();
                        return;
                    }
                    resultSet.next();
                    int id = resultSet.getInt("id");
                    String firstName = resultSet.getString("firstname");
                    String lastName = resultSet.getString("lastname");
                    String gender = resultSet.getString("gender");
                    int age = resultSet.getInt("age");
                    stream.accept(new Person(id, firstName, lastName, gender, age));
                    }
                );
        TStream<String> rcvd = rcvdPerson.map(person -> person.toString());

        rcvd.sink(tuple -> System.out.println(
                String.format("%s rcvd: %s", t.getName(), tuple)));
        completeAndValidate("", t, rcvd, SEC_TIMEOUT, expected.toArray(new String[0]));
        assertEquals("executionExcCnt", expectedExcCnt, executionExcCnt.get());
    }

    @Test
    public void testBadResultHandler() throws Exception {
        Topology t = newTopology("testBadResultHandler");
        // exercise and validate behavior with transient result handler failures

        populatePersonsTable();
        List<String> expected = expectedPersons(newOddIdPredicate(), personList);
        int expectedExcCnt = personList.size() - expected.size();

        JdbcStreams db = new JdbcStreams(t,
                () -> getDataSource(DB_NAME),
                dataSource -> connect(dataSource));

        // Create a stream of Person from a stream of ids
        AtomicInteger executionExcCnt = new AtomicInteger();
        TStream<PersonId> personIds = t.collection(personIdList);
        TStream<Person> rcvdPerson = db.executeStatement(personIds,
                () -> "SELECT id, firstname, lastname, gender, age"
                        + " FROM persons WHERE id = ?",
                (tuple,stmt) -> stmt.setInt(1, tuple.id),
                (tuple,resultSet,exc,stream) -> {
                    System.out.println(t.getName()+" resultHandler called tuple="+tuple+" exc="+exc);
                    if (exc!=null) {
                        executionExcCnt.incrementAndGet();
                        return;
                    }
                    resultSet.next();
                    int id = resultSet.getInt(tuple.id % 2 == 0
                                                ? "ID-THIS-IS-BOGUS" : "id");
                    String firstName = resultSet.getString("firstname");
                    String lastName = resultSet.getString("lastname");
                    String gender = resultSet.getString("gender");
                    int age = resultSet.getInt("age");
                    stream.accept(new Person(id, firstName, lastName, gender, age));
                    }
                );
        TStream<String> rcvd = rcvdPerson.map(person -> person.toString());

        rcvd.sink(tuple -> System.out.println(
                String.format("%s rcvd: %s", t.getName(), tuple)));
        completeAndValidate("", t, rcvd, SEC_TIMEOUT, expected.toArray(new String[0]));
        assertEquals("executionExcCnt", expectedExcCnt, executionExcCnt.get());
    }

    @Test
    public void testNonResultSetStmt() throws Exception {
        Topology t = newTopology("testNonResultSetStmt");
        // exercise and validate use of non-ResultSet SQL statement
        // wrt proper resultHandler behavior - e.g., receive exception,
        // can generate tuples

        List<String> expected = Arrays.asList("once");

        // throw if can't create DataSource - e.g., can't locate derby
        getDataSource(DB_NAME);

        JdbcStreams db = new JdbcStreams(t,
                () -> getDataSource(DB_NAME),
                dataSource -> connect(dataSource));

        // Add stream of Person to the db
        TStream<String> trigger = t.collection(expected);
        TStream<String> dropTableStep = db.executeStatement(trigger,
                () -> "DROP TABLE swill",
                (tuple,stmt) -> { /* no params */ },
                (tuple,rs,exc,consumer) -> {
                        // ok if fails
                        System.out.println(t.getName()+" resultHandler drop table exc="+exc);
                        if (rs!=null)
                            throw new IllegalStateException("rs!=null");
                        consumer.accept(tuple);
                    }
                );
        TStream<String> createTableStep = db.executeStatement(dropTableStep,
                () -> "CREATE TABLE swill (id INTEGER NOT NULL)",
                (tuple,stmt) -> { /* no params */ },
                (tuple,rs,exc,consumer) -> {
                        System.out.println(t.getName()+" resultHandler create table exc="+exc);
                        if (rs!=null)
                            throw new IllegalStateException("rs!=null");
                        consumer.accept(tuple);
                    }
                );
        TStream<String> failDropTable = db.executeStatement(createTableStep,
                () -> "DROP TABLE no_such_table",
                (tuple,stmt) -> { /* no params */ },
                (tuple,rs,exc,consumer) -> {
                        System.out.println(t.getName()+" resultHandler fail drop table exc="+exc);
                        if (exc==null)
                            throw new IllegalStateException("exc==null");
                        if (rs!=null)
                            throw new IllegalStateException("rs!=null");
                        consumer.accept(tuple);
                    }
                );
        TStream<String> selectStep = db.executeStatement(failDropTable,
                () -> "SELECT * FROM swill",
                (tuple,stmt) -> { /* no params */ },
                (tuple,rs,exc,consumer) -> {
                        System.out.println(t.getName()+" resultHandler select exc="+exc);
                        if (rs==null)
                            throw new IllegalStateException("rs==null");
                        consumer.accept(tuple);
                    }
                );
        TStream<String> rcvd = selectStep;

        completeAndValidate("", t, rcvd, SEC_TIMEOUT, expected.toArray(new String[0]));
    }

}

redpajama_set_name: RedPajamaGithub


text:
Медиалогия — российская компания-разработчик автоматической системы мониторинга и анализа СМИ и социальных сетей в режиме реального времени.

История
Компания «Медиалогия» появилась как эксперимент сотрудников ИТ-холдинга IBS. Для своей консалтинговой практики им потребовалась система поиска и анализа информации. Инструмент оказался настолько удачным, что вскоре его начали использовать не только внутри ИT-холдинга, но и для сторонних клиентов. Так, в 2003 году появилась независимая компания «Медиалогия», имя которой придумал Анатолий Опарин, в то время работавший над протопипом «Медиалогии» в компании IBS.

Собственники
Структура владения ООО «Медиалогия»:
 Банк ВТБ — 63 %;
 Мацоцкий Сергей — 21 %;
 Волков Александр (генеральный директор) — 16 %.

До января 2019 года 75 % «Медиалогии» принадлежало компании IBS, 25 % — Сергею Мацоцкому.

О компании
«Медиалогия» — это автоматизированная система, осуществляющая мониторинг СМИ и социальных сетей. В компании работает более 250 сотрудников.

В марте 2021 года компания провела ребрендинг, в результате которого обновила логотип, шрифт, фирменный стиль.

Система
Система состоит из двух основных частей:
 база данных: 81 000 источников СМИ, 2,4 мрд аккаунтов социальных сетей;
 автоматизированный аналитический модуль.

База СМИ «Медиалогии» обновляется и пополняется на ежедневной основе.

Автоматизированный аналитический модуль в свою очередь состоит из двух частей:
 робота поисковика;
 автоматической системы распознавания и анализа контента.
Это все является комплексной разработкой компании.

Также «Медиалогия» разработала и зарегистрировала МедиаИндекс, призванный облегчить задачу качественного анализа публикаций СМИ.
Индекс основывается на различных показателях размещаемого материала, как то:

 цитируемость СМИ и социальные метрики СМИ;
 позитив/негатив;
 главная/эпизодическая роль;
 размер статьи, номер полосы, аудитория (PR value);
 наличие фотографии;
 упоминание объекта в заголовке;
 наличие прямой и косвенной речи.
Индекс рассчитывается автоматически и может колебаться в пределах от −1000 до +1000. Знак индекса зависит от позитивного или негативного упоминания искомого объекта в статье. Чем выше МедиаИндекс опубликованного материала, тем более позитивным и заметным является сообщение в поле СМИ.

Работа с системой происходит через web-интерфейс.
Упомянутые технологии позволяют проводить мгновенный количественный и качественный анализ текстов. Наряду с контекстным присутствует объектный поиск, исключающий информационный шум. Результаты поиска и/или анализа доступны в виде графиков и таблиц с возможностью экспорта готовых отчетов в различные форматы документов.
В системе доступны текстовые версии телепрограмм основных федеральных телевизионных каналов: 1 канал, Россия 24, Россия 1, НТВ, РЕН, ТВ Центр, РБК, ТК Дождь, Lifenews, Матч ТВ. В мае 2009 года появилась функция мониторинга социальных медиа. В январе 2015 года компания выпустила продукт по анализу цитируемости СМИ для издательских домов.

C 1 января 2017 года «Медиалогия» внесла изменения в расчёт МедиаИндекса — вместе с показателем цитируемости СМИ для оценки влиятельности источников теперь будут учитываться социальные метрики (количество likes/shares), а вес влиятельности СМИ в формуле МедиаИндекса повышается. По результатам изменений значения МедиаИндекса с 1 января 2017 года возросли. При проведении медиаисследований необходимо отдельно оценивать периоды до 1 января 2017 года и после этой даты.

Пользователи
Пользователями «Медиалогии» являются пресс-службы коммерческих организаций и государственных учреждений.

Деятельность компании
Компания занимается отраслевыми медиа исследованиями, а также публикует на регулярной основе рейтинги самых цитируемых СМИ.

Финансовые показатели
В 2019 году выручка компании составила 1 138 млн руб. (+55 % к 2018 году), чистая прибыль — 85 млн (+106 %) согласно данным СПАРК-Интерфакс. Большую часть выручки компания получает от контрактов с частными компаниями. В то же время одним из стабильных источников доходов являются госконтракты: в 2016 году они принесли 243 млн руб., в 2017 году — 223 млн руб., в 2018 году — 131 млн руб.

Награды
 Благодарность Министра культуры и массовых коммуникаций Российской Федерации (9 июня 2006 года) — за  активное участие в организации и проведении Первого Форума научной и творческой интеллигенции государств-участников СНГ.

Примечания

Ссылки
 Официальный сайт компании
 Страница Медиалогии на Facebook
 Твиттер Медиалогии
 Медиалогия ВКонтакте
 Медиалогия в YouTube
 Медиалогия в Telegram
 Яндекс Дзен Медиалогия
 Первое упоминание компании в прессе PCWEEK/RE, 16.12.2003

Компании Москвы
Мониторинг СМИ
Связи с общественностью
Мониторинг соцсетей
Медиаисследование

redpajama_set_name: RedPajamaWikipedia


The same pigmentation and long-lasting, transfer-proof wear of our Crème Gel Colour liner in a pencil!
Colour glides on smoothly for comfortable application. Creamy formula makes blending super easy and formula dries down for long-lasting wear.
- To prevent breakage, be sure not to overadvance the liner.
- To smoke out or smudge, use a pencil brush.
*Not intended for use in the immediate eye area. Dimethicone, Ceresin, Trimethylsiloxysilicate, Bis (Glycidoxyphenyl) Propane / Bisamionmethyl-Nonbornane Copolymer, Alumina, Polyethylene, Synthetic Fluorphlogopite, Stearoxy Dimethicone, Silica, Tin Oxide, Aluminum Hydroxide, Red 22 (CI 45380), Red 28 Lake (CI 45410), Titanium Dioxide (CI 77891).


Exciting news! In late October, KFC released a new sustainable packaging policy that we can get behind. We've been studying the implications of the policy and talking with the company's biggest suppliers to ensure that there's real change on the ground for our forests. After much analysis, we are now confident that it will.
Essentially, what the policy will do is increase the overall use of recycled paper, eliminate controversial sourcing from endangered forests like the Green Swamp in southeastern North Carolina, and give preference to FSC-certified fibre, which will limit the most destructive practices in the woods. You can view the policy here (click on Sustainable Sourcing and Waste Recovery Policy and it will pop up).
In celebration of our progress with KFC, one of our talented activists worked with us to create this fun game – Bucket Kickin' Chicken, which you can play here.
Though we are excited about the change that has come from leadership at KFC as it relates to the forests of the Southern US, unfortunately, the new policy does not include language on deforestation. Global deforestation is the main reason our allies at Greenpeace are standing with the people of Indonesia and calling on the company to stop buying from Asia Pulp and Paper, who is notorious for this practice.
So though our forests have received a reprieve, Indonesia's have not, and we will continue to support the Greenpeace campaign until KFC gets the entire job done. We hope our new relationship with the company can help create the leverage needed to green KFC's packaging worldwide.


The Business of Art and The Art of Business And….
Andre: What does it do to us, Wally, living in an environment where something as massive as the seasons or winter or cold, don't in any way affect us? I mean, were animals after all. I mean… what does that mean? I think that means that instead of living under the sun and the moon and the sky and the stars, we're living in a fantasy world of our own making.
Wally: Yeah, but I mean, I would never give up my electric blanket, Andre. I mean, because New York is cold in the winter. I mean, our apartment is cold! It's a difficult environment. I mean, our life is tough enough as it is. I'm not looking for ways to get rid of a few things that provide relief and comfort. I mean, on the contrary, I'm looking for more comfort because the world is very abrasive. I mean, I'm trying to protect myself because, really, there's these abrasive beatings to be avoided everywhere you look!
Andre: But, Wally, don't you see that comfort can be dangerous? I mean, you like to be comfortable and I like to be comfortable too, but comfort can lull you into a dangerous tranquility.
The restaurant is half packed with guests all around, and quickly our focus begins to crystallize around our table and discussion to unfold. Two Paratheatre labs (watch for 3 podcasts on this topic coming soon, titled "Beware Archetypes Crossing") each lasting between 8 – 10 weeks, meeting twice a week for 3 hours, it's time to get some feedback and pointers to further development in this medium as we prepare for our third lab with him. Antero tells me to give myself more time in no-form. My mind quickly races and remembers trying to articulate what No Form is to a friend, before guiding him to Antero's own description on his website. In Antero's own words "The purpose of no-form is two-fold: 1) to deepen receptivity to energy sources innate to the physical and energetic bodies towards their engagement and expression and 2) to discharge and disperse identification with these forces after each engagement. Like an empty container, no-form allows us to become full with the energies engaged and then to empty, again. No-form is not something that can be taught but only developed and deepened; we either already have some existing relationship or intimacy with Void or, we do not. The experience is essentially personal to each individual but also, impersonal. Astrophysics suggests there is no such thing as 'empty space' anywhere in nature, that space is not empty but teeming with dynamic potential energy. They could have been describing no-form.
The food arrived, the aroma of the food filled the room and we started to dig into the delicacies that lay before us. The paintings of various gods, the large wall painted with Mt. Meru and the sweet smells of various spices was a feast for our consciousness. The imagery of Mt. Meru bought the conversation now to the work of Alejandro Jodorowsky and his movie "The Holy Mountain." The conversation was now quickly moving towards our work – the work of creating a movie/documentary with Bucky's principles. Bucky or Buckminister Fuller's ideas and generalized principles have had a huge impact on us, and we are looking at ways of exploring them in a new format.
The hostess now approaches us, and brings us the check. I looked at her, and thinking to myself "we are not done," and could we please get some chai for all of us. A good Indian subcontinent meal is never complete without chai. Indian chai when made right has just this right blend of sweetness and spiciness, coming from a mixture of cardamom, ginger, cinnamon among other spices. The whole approach of the hostess again brought to mind "My dinner with Andre" and the occasional intrusion of the waiter during the dinner, and more importantly a rich conversation. The chai arrived, and the aroma filled my consciousness while the warmth of the chai soothed the throat.
" There are some that consider the audience and tailor the movie towards them" continued Antero as we sipped our delicious chai "but if that formula works, then there would be so many more hits and blockbusters." We just rolled in laughter at the obviousness and irony of the statement. He summed his take on this with "stay true to your vision, plan hard on what you want to do, and be prepared for improvisations to happen, to emerge." Our discussion went on for a while longer on various topic of making movies, and staying true to one's vision and letting improvisations emerge. The hostess arrived once again with the check, and after paying for it, we started our walk back towards Antero's home. Its about 10 PM now I think, most business around Shattuck Avenue have shut down for the night.
Its past 10 15 pm or so, and it will be atleast an hour's drive home, we say our good bye's for now "see you at the lab in March." We get into Sergey's car, our very faithful companion on many a trips of exploration, and start our drive back to the south bay. The hour is filled with lively discussion of things we learned, and the path that lay before us. Sergey stated "you know the thing that stood out for me is we need to focus on the imperfections of the characters, these screw ups in their lives will actually add to the richness of the story. If you notice the development and growth of RCG, we have been opening up to our faults more and more, being more vulnerable to who we are, and how we may be screwed up." I nodded and said "yes, I agree, our path from our faults and short comings towards some sense of normalcy and contribution is the true hero's journey. As Antero had said earlier "don't build super heroes"– look in the ordinary and find the extraordinary.
A little past 11 when I got home and the same thought keeps running through me "stay true to your art, your vision." It's a cold night, I pull my comforter on me and think of yes its important to stay true to our art, our vision. Afterall that's what we are doing with RCG, we have not advertised, we have not commercialized, we have done it as an expression, as an offering, it was for the sake of following our vision, our art, not for commercial value. And yet it seems to have touched listeners around the planet, and yet it has bought many wonderful people into our lives. Yes staying true to one's vision, one's art, one's impulses even if you are on the Fringe, even if it makes you a deviant is critical. The question here truly is make sure you are a positive deviant.
All ideas' follow the same path, they start with the artist/idealist on the fringe, then move into the cutting edge when a few others have seen and communicate the same vision. From here if it catches the eye of the hipsters it enters the realm of the cool in the hip circles until a "tipping point" arrives, taking towards the next big thing and it ends up becoming a social convention. The art and artist stays pure to his vision, and is found in the fringe and cutting edge, as more enter it the devox "voice of the deviant" starts to be lost, the business of art starts to fade, and the art of business kicks in.
The Art of Business is taking the ideas from the cutting edge and realm of the cool, and moving it into "the next big thing" and hope that this expression becomes a social convention. In making it a social convention huge fortunes are made usually for the venture capitalist and acute entrepreneur, they have usually moved away if not far away from the devox – the true voice of the original deviant, who perhaps sits and see's his art is now perhaps a shadow of the original. It hits me as I roll in bed that perhaps this is what James Joyce was alluding to in his "Portrait of the Artist as a Young Man" where he speaks of the function of art. Joyce states that "true art is beautiful and/or sublime. It stops you dead in your tracks, leaves you speechless." He further states what art is not "Improper art moves you to do something. It either aims to teach or move you to do something that you would not normally do." It hits me that is the aim of advertising, the critical tool to move an idea/vision from the cutting edge to the next big thing. It aims at making you do something you would not normally do or want.
The Business of Art is following one's impulses to find beauty and the sublime in it, and to be arrested in its awe. The Art of Business is "moving others to do something they may not normally do." There has to be a third way… there must be a third way but for now I need to sleep, have a long day ahead and to be at work at 6 am and for now I tell myself "stay true to your art, your vision" and cuddle into the warmth of my comforter.
The next day, after a long day at work, between partnership meetings and meetings, I return home. My mind is still reeling from the conversations the night before and the business of art. Bucky and the movie to get the ideas out have somehow taken the back seat. I continue reading the Moon of Hao Bihn until its time to head to the dojo. The evening is cold, and it sure gets dark early in winters. The dojo, or where the way is practiced is a corner in the park. The class is small, 4 regular students and me, and this evening there are only two shows, and it hits me that even though there are just two students and me, we are here when its wet and cold, practicing our art – following our impulses to learn the martial art, that has been passed down generation to generation for perhaps hundreds of years, and in the process discover ourselves.
So here I am, sitting and that feeling of calm comes back, and I know that for me its "continue to being true to the art and expression" of my spirit, of my own way. The movie, the podcasts, the dojo all serve the same need, they are devices for reaching into the further reaches of my own inner space. Time to head to bed, this time more relaxed and telling myself the third way is "Art is the way" its not about the business of art or art of business, but Art is the way. And the way of art is "following those impulses from deep within" and then continuing to work on the art while others play, and when it is your turn to play they will pay to be there. Time to sleep, and tomorrow it will be time again to work on the art, while others perhaps are playing.


The newspapers are full of bad News: Gulf oil spill, corrupt politicians, acts of terrorism, Russian spies run amok... Today I have some good news for a change: Lindsay Lohan got punched by a waitress.
The details aren`t important, the fact that the train wreck got hit is enough to make anyone`s day.
"Lindsay Lohan turned 24 Friday, and thanks to her SCRAM bracelet, the year is off to a sober start, as she was also punched.
The troubled starlet was on her best behavior, it`s not like she had much of a choice thanks to her SCRAM bracelet, and she still ends up getting punched.
It really hurts to be Lindsay Lohan.


text:
Q: RepositoryConfigurationExtensionSupport => useRepositoryConfiguration => "Reactive Repositories are not supported by %s. Offending repository is %s!" with org.springframework.boot update from 2.0.4.RELEASE to 2.0.5.RELEASE start to get exception:

RepositoryConfigurationExtensionSupport
  =>  useRepositoryConfiguration
  =>  InvalidDataAccessApiUsageException: "Reactive Repositories are not supported by %s. Offending repository is %s!"

what is the best/simplest Spring Data workaround for this? Could someone provide example? if it is possible without redefinition of @EnableJpaRepositories and JpaRepositoriesRegistrar...

A: This is solution, but I don't like it.. +3 new classes..
EnableXxxJpaRepositories is practically exact copy of EnableJpaRepositories..
EnableXxxJpaRepositories:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(XxxJpaRepositoriesRegistrar.class)
public @interface EnableXxxJpaRepositories {

  /**
   * Alias for the {@link #basePackages()} attribute. Allows for more concise annotation
   * declarations e.g.: {@code @EnableXxxJpaRepositories("org.my.pkg")} instead of {@code
   *
   * @EnableXxxJpaRepositories(basePackages="org.my.pkg")}.
   */
  String[] value() default {};

  /**
   * Base packages to scan for annotated components. {@link #value()} is an alias for (and mutually
   * exclusive with) this attribute. Use {@link #basePackageClasses()} for a type-safe alternative
   * to String-based package names.
   */
  String[] basePackages() default {};

  /**
   * Type-safe alternative to {@link #basePackages()} for specifying the packages to scan for
   * annotated components. The package of each class specified will be scanned. Consider creating a
   * special no-op marker class or interface in each package that serves no purpose other than being
   * referenced by this attribute.
   */
  Class<?>[] basePackageClasses() default {};

  /**
   * Specifies which types are eligible for component scanning. Further narrows the set of candidate
   * components from everything in {@link #basePackages()} to everything in the base packages that
   * matches the given filter or filters.
   */
  Filter[] includeFilters() default {};

  /**
   * Specifies which types are not eligible for component scanning.
   */
  Filter[] excludeFilters() default {};

  /**
   * Returns the postfix to be used when looking up custom repository implementations. Defaults to
   * {@literal Impl}. So for a repository named {@code PersonRepository} the corresponding
   * implementation class will be looked up scanning for {@code PersonRepositoryImpl}.
   */
  String repositoryImplementationPostfix() default "Impl";

  /**
   * Configures the location of where to find the Spring Data named queries properties file. Will
   * default to {@code META-INF/jpa-named-queries.properties}.
   */
  String namedQueriesLocation() default "";

  /**
   * Returns the key of the {@link QueryLookupStrategy} to be used for lookup queries for query
   * methods. Defaults to {@link Key#CREATE_IF_NOT_FOUND}.
   */
  Key queryLookupStrategy() default Key.CREATE_IF_NOT_FOUND;

  /**
   * Returns the {@link FactoryBean} class to be used for each repository instance. Defaults to
   * {@link JpaRepositoryFactoryBean}.
   */
  Class<?> repositoryFactoryBeanClass() default JpaRepositoryFactoryBean.class;

  /**
   * Configure the repository base class to be used to create repository proxies for this particular
   * configuration.
   *
   * @since 1.9
   */
  Class<?> repositoryBaseClass() default DefaultRepositoryBaseClass.class;

  // JPA specific configuration

  /**
   * Configures the name of the {@link EntityManagerFactory} bean definition to be used to create
   * repositories discovered through this annotation. Defaults to {@code entityManagerFactory}.
   */
  String entityManagerFactoryRef() default "entityManagerFactory";

  /**
   * Configures the name of the {@link PlatformTransactionManager} bean definition to be used to
   * create repositories discovered through this annotation. Defaults to {@code
   * transactionManager}.
   */
  String transactionManagerRef() default "transactionManager";

  /**
   * Configures whether nested repository-interfaces (e.g. defined as inner classes) should be
   * discovered by the repositories infrastructure.
   */
  boolean considerNestedRepositories() default false;

  /**
   * Configures whether to enable default transactions for Spring Data JPA repositories. Defaults to
   * {@literal true}. If disabled, repositories must be used behind a facade that's configuring
   * transactions (e.g. using Spring's annotation driven transaction facilities) or repository
   * methods have to be used to demarcate transactions.
   *
   * @return whether to enable default transactions, defaults to {@literal true}.
   */
  boolean enableDefaultTransactions() default true;
}

XxxJpaRepositoriesRegistrar:
@Configuration
public class XxxJpaRepositoriesRegistrar extends RepositoryBeanDefinitionRegistrarSupport {

  @Override
  protected Class<? extends Annotation> getAnnotation() {
    return EnableXxxJpaRepositories.class;
  }

  @Override
  protected RepositoryConfigurationExtension getExtension() {
    return new XxxJpaRepositoryConfigExtension();
  }

}

XxxJpaRepositoryConfigExtension:
@Component
public class XxxJpaRepositoryConfigExtension extends JpaRepositoryConfigExtension {

  @Override
  protected boolean useRepositoryConfiguration(RepositoryMetadata metadata) {
    //return super.useRepositoryConfiguration(metadata);
    //return metadata.isReactiveRepository();
    return true;
  }

}

redpajama_set_name: RedPajamaStackExchange